hyperframes 0.8.181 → 0.8.183

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 (215) hide show
  1. package/bin/hyperframes.mjs +3 -1
  2. package/dist/{add-AWQ2EGBU.js → add-HW3ZGR36.js} +22 -22
  3. package/dist/{animatedGifPrep-SENXJ7TN.js → animatedGifPrep-EPLN37ZN.js} +13 -13
  4. package/dist/api.js +28 -28
  5. package/dist/{asset-XBH3MN3Y.js → asset-TOASKL3Z.js} +3 -3
  6. package/dist/{assetCataloger-KH4X2CRO.js → assetCataloger-PZN5HYG2.js} +15 -13
  7. package/dist/{audio-Q7I473UN.js → audio-F5OIQVJO.js} +29 -29
  8. package/dist/{auth-I7CBTEUS.js → auth-YVQLRS3T.js} +4 -4
  9. package/dist/{autoUpdate-KY5TLSN7.js → autoUpdate-EG4ZFW4D.js} +2 -2
  10. package/dist/{backgroundChecks-4Q3VVK5W.js → backgroundChecks-WINNQVR2.js} +3 -3
  11. package/dist/backgroundChecksWorker.js +3 -3
  12. package/dist/{batchRender-3AYDQRBI.js → batchRender-PASZTMEE.js} +7 -7
  13. package/dist/{beats-P4LENNVT.js → beats-KGIOEBLW.js} +12 -12
  14. package/dist/{benchmark-AXOAECN3.js → benchmark-ZNY2L7HN.js} +24 -24
  15. package/dist/{browser-XZKB5HGJ.js → browser-REAO7RU4.js} +20 -20
  16. package/dist/{bundleWithLocalizedFonts-2WCR57IN.js → bundleWithLocalizedFonts-OAYLYC4W.js} +2 -2
  17. package/dist/{capture-NWARHRHR.js → capture-IK6GWQDD.js} +8 -5
  18. package/dist/{capture-4RN4APDF.js → capture-WOSF276U.js} +49 -41
  19. package/dist/{captureCompositionFrame-QOF5BRF4.js → captureCompositionFrame-DDZNKYRE.js} +21 -20
  20. package/dist/{captureTimeout-K2JNVVCI.js → captureTimeout-RIMG6IYH.js} +1 -1
  21. package/dist/{catalog-CRPOPVD5.js → catalog-AKTXS7OJ.js} +42 -42
  22. package/dist/{catch-up-MHWGUQ42.js → catch-up-O3VZMPVE.js} +15 -15
  23. package/dist/check-6E46NIWI.js +116 -0
  24. package/dist/checkBrowser-UNZHQFNH.js +117 -0
  25. package/dist/{chunk-Y2RXRPL2.js → chunk-3BA2GP4H.js} +5 -5
  26. package/dist/{chunk-N5SXQCJL.js → chunk-3OLIGYWN.js} +3 -3
  27. package/dist/{chunk-OR5WCFWZ.js → chunk-3Q47QC46.js} +2 -2
  28. package/dist/{chunk-EOADENKV.js → chunk-4FQKS7BJ.js} +16 -14
  29. package/dist/{chunk-HODBPO4A.js → chunk-4UFJWRHG.js} +461 -275
  30. package/dist/{chunk-537IYAEE.js → chunk-4UMPIPCQ.js} +9 -1
  31. package/dist/{chunk-OJTDUF4W.js → chunk-5MBLWFLM.js} +1 -1
  32. package/dist/{chunk-UVEQLDKB.js → chunk-5OGDBU4G.js} +3 -2
  33. package/dist/{chunk-L3YOGIPG.js → chunk-66LREXGS.js} +1 -1
  34. package/dist/{chunk-YPBIAONI.js → chunk-73LTCCZI.js} +218 -150
  35. package/dist/{chunk-GZVP4TWN.js → chunk-7JAD4MEW.js} +1 -1
  36. package/dist/{chunk-NAMGMP3R.js → chunk-7KVVNF7B.js} +1 -1
  37. package/dist/{chunk-GK2FIKIQ.js → chunk-ADDHW2FS.js} +214 -37
  38. package/dist/{chunk-WUQUR33W.js → chunk-AKFADCMS.js} +1 -1
  39. package/dist/{chunk-VAJIPSN6.js → chunk-ANR6WOC3.js} +1 -1
  40. package/dist/{chunk-4USWWI2Y.js → chunk-ATMDOUNN.js} +2 -2
  41. package/dist/{chunk-XSRUVMXK.js → chunk-B2SZZFWW.js} +4 -4
  42. package/dist/{chunk-TO6JNTML.js → chunk-BP4VNTZL.js} +13 -8
  43. package/dist/{chunk-DJJ7SK4F.js → chunk-CAHTO62O.js} +8 -8
  44. package/dist/{chunk-GNE57O7U.js → chunk-CGK4XZ2J.js} +1 -1
  45. package/dist/{chunk-O5AE7HOP.js → chunk-CJYAJ3QM.js} +37 -33
  46. package/dist/{chunk-5JMZLQT6.js → chunk-COTLNID2.js} +16 -16
  47. package/dist/{chunk-E24HSMZV.js → chunk-CYBXXSC4.js} +65 -14
  48. package/dist/{chunk-NZZYJOMJ.js → chunk-CZUAX3BV.js} +6 -5
  49. package/dist/{chunk-K26FR4SM.js → chunk-DEORFAWP.js} +12 -12
  50. package/dist/{chunk-GV5R5B7Q.js → chunk-DGECWPTL.js} +1 -1
  51. package/dist/{chunk-BRHI7EIA.js → chunk-DKPNNYBZ.js} +4 -0
  52. package/dist/{chunk-5E5EYPZO.js → chunk-DLC2FICN.js} +7 -7
  53. package/dist/{chunk-D3ZWBHZP.js → chunk-DYAPHNV6.js} +3 -2
  54. package/dist/{chunk-RGHQID2E.js → chunk-EHSBBBR2.js} +5 -3
  55. package/dist/{chunk-IWTRHPTP.js → chunk-EVAQPW6O.js} +8 -8
  56. package/dist/{chunk-S3RYRF3W.js → chunk-F6WHPHLF.js} +1 -1
  57. package/dist/chunk-FG4BBFZI.js +122 -0
  58. package/dist/{chunk-WITHUCCB.js → chunk-GAGMLVCV.js} +2 -2
  59. package/dist/chunk-GMNHAOMJ.js +3805 -0
  60. package/dist/{chunk-KIO3R4QN.js → chunk-GPE3WWTO.js} +16 -6
  61. package/dist/{chunk-IL3GTCQY.js → chunk-GTE5WZAM.js} +72 -140
  62. package/dist/{chunk-55IG255C.js → chunk-HLBODNGW.js} +1 -1
  63. package/dist/{chunk-KMAAOHLO.js → chunk-HRPWRZGF.js} +1 -1
  64. package/dist/{chunk-UPFUC4DB.js → chunk-HTIUNMTP.js} +1 -1
  65. package/dist/{chunk-WUUCEFL5.js → chunk-IC2WYONA.js} +5 -5
  66. package/dist/{chunk-DUN63LHY.js → chunk-ITSLKUQM.js} +2 -2
  67. package/dist/{chunk-YJDB4FLT.js → chunk-JQYJXUJW.js} +1 -1
  68. package/dist/{chunk-PBN6GBJE.js → chunk-JVBRJMOP.js} +14 -1
  69. package/dist/{chunk-XH262OWN.js → chunk-K2Z5DZBS.js} +1 -1
  70. package/dist/{chunk-RHWJKSGH.js → chunk-KANNRHY7.js} +1 -1
  71. package/dist/{chunk-AOWDVB2T.js → chunk-KRFAX5JK.js} +1 -1
  72. package/dist/{chunk-UIDZRCBG.js → chunk-LBWRQ4XA.js} +1 -1
  73. package/dist/{chunk-T7UHTUUE.js → chunk-MIZDJVPZ.js} +9 -9
  74. package/dist/{chunk-32GKETR7.js → chunk-MMQ52NIZ.js} +74 -0
  75. package/dist/chunk-MOEGCMKI.js +180 -0
  76. package/dist/{chunk-E6RPWJVC.js → chunk-NAUKCKCJ.js} +5 -1
  77. package/dist/{chunk-JBCU6NR5.js → chunk-NZ3BE2QE.js} +56 -55
  78. package/dist/{chunk-JMFJI26U.js → chunk-O7N3A7PE.js} +2 -2
  79. package/dist/{chunk-3PULCIY5.js → chunk-OH56PXFH.js} +5 -5
  80. package/dist/{chunk-H4YZZ2VQ.js → chunk-PFD25NAC.js} +1 -1
  81. package/dist/{check-DJCUOUDI.js → chunk-Q6UYKWBG.js} +198 -142
  82. package/dist/{chunk-3DKN5WKL.js → chunk-QH3T4WI2.js} +77 -6
  83. package/dist/{chunk-Y5GY6Y7A.js → chunk-QX4GGPMY.js} +2 -2
  84. package/dist/{chunk-B6JLCPT3.js → chunk-R6OV4J4K.js} +6 -6
  85. package/dist/{chunk-XEWHUPFS.js → chunk-RZXUQR42.js} +2 -2
  86. package/dist/{chunk-YMS6CJCD.js → chunk-SAQYJLI6.js} +1 -1
  87. package/dist/{chunk-OJDXABUF.js → chunk-TJB4GAV6.js} +2 -2
  88. package/dist/{checkBrowser-VES2NF3K.js → chunk-TOHA5NAU.js} +187 -114
  89. package/dist/{chunk-RXQHSGAQ.js → chunk-TXGZZKDF.js} +2 -2
  90. package/dist/{chunk-3XDOGSRD.js → chunk-U5YVWG5W.js} +3 -3
  91. package/dist/{chunk-ICMXC3MI.js → chunk-U6RXZNZE.js} +31 -18
  92. package/dist/{chunk-PF7OWVTL.js → chunk-UNOSCGBG.js} +2 -2
  93. package/dist/{chunk-X7CCSMRR.js → chunk-VAK7A2N6.js} +16 -16
  94. package/dist/{chunk-OFY6JTZC.js → chunk-VDJO4DJ7.js} +2 -2
  95. package/dist/{chunk-LBQFLUIY.js → chunk-VFBAKPRC.js} +9 -49
  96. package/dist/{chunk-ZUOSILUE.js → chunk-VH5KESLX.js} +1 -1
  97. package/dist/{chunk-22QHO26F.js → chunk-W64L7IFS.js} +1 -1
  98. package/dist/{chunk-4IEH6EAC.js → chunk-WT4PYV2J.js} +4 -6
  99. package/dist/{chunk-XFCLWWL3.js → chunk-X3IA5RYH.js} +2 -2
  100. package/dist/{chunk-UZOZ2W2E.js → chunk-XAQDR5Y5.js} +2 -2
  101. package/dist/{chunk-6I7V6Q7F.js → chunk-XJHKJXT4.js} +103 -20
  102. package/dist/{chunk-V2UNZ7QP.js → chunk-XOVHO3TT.js} +25 -14
  103. package/dist/{chunk-65WIUIHL.js → chunk-XR5BSEUF.js} +7 -15
  104. package/dist/{chunk-IZM562YJ.js → chunk-Z4R35NJS.js} +4 -4
  105. package/dist/{chunk-4OT3FWVV.js → chunk-ZFO3A3QL.js} +2 -2
  106. package/dist/{clean-GJNDVVDI.js → clean-WNEIVBF3.js} +40 -40
  107. package/dist/cli.js +68 -64
  108. package/dist/{cloud-JCWNMKXC.js → cloud-6GSSDCJL.js} +4 -4
  109. package/dist/{cloudrun-2BKGY53X.js → cloudrun-4NEJRE4T.js} +8 -8
  110. package/dist/commands/layout-audit.browser.js +15 -4
  111. package/dist/commands/motion-signature.browser.js +52 -0
  112. package/dist/{compare-XWM7FAYM.js → compare-2JWQ5ABA.js} +50 -47
  113. package/dist/{compiler-U3W6CJW7.js → compiler-27KQD7KW.js} +6 -6
  114. package/dist/{component-CBRAE325.js → component-HCRET3MH.js} +4 -4
  115. package/dist/{compositions-EZYJEHQ3.js → compositions-HTSQ6SUJ.js} +28 -29
  116. package/dist/{contactSheet-27SRU7A4.js → contactSheet-CAGMKI3E.js} +3 -1
  117. package/dist/{delete-JWWMOITI.js → delete-GHQ5UYM7.js} +9 -9
  118. package/dist/{deploy-UGOV76OH.js → deploy-I3Z3NAVA.js} +11 -11
  119. package/dist/{destroy-QBLMYDBF.js → destroy-4B5HW5FH.js} +5 -5
  120. package/dist/{deterministicFonts-L7YEEFGI.js → deterministicFonts-JFLSSKRB.js} +2 -2
  121. package/dist/{dist-2FMTAVGL.js → dist-SENYPQGW.js} +4 -4
  122. package/dist/{dist-VO7OXOFK.js → dist-WRDLWRMS.js} +5 -5
  123. package/dist/{docs-MPOM3PHH.js → docs-UEWLIP6D.js} +1 -1
  124. package/dist/{doctor-XSKSZRR7.js → doctor-UGFVQZHI.js} +27 -27
  125. package/dist/{events-AIZODZMP.js → events-BLJGWMNP.js} +9 -9
  126. package/dist/{events-RGS4MAH4.js → events-YS4OVX3I.js} +6 -6
  127. package/dist/{feedback-GE3VDZOH.js → feedback-AZ3SJ5HF.js} +35 -35
  128. package/dist/{ffmpeg-SCXZTR6X.js → ffmpeg-2AECXG7V.js} +15 -15
  129. package/dist/{figma-3R4XST4Y.js → figma-DRYIJQHV.js} +3 -3
  130. package/dist/fontLocalizeCli.js +23 -23
  131. package/dist/{get-4FKJP6IM.js → get-DDEAOFPB.js} +9 -9
  132. package/dist/{gpuPolicy-4NNXESM7.js → gpuPolicy-UDJT2MQK.js} +13 -13
  133. package/dist/{grade-compare-FAYVPXUR.js → grade-compare-LJKK5NSY.js} +55 -50
  134. package/dist/{help-C3UQMYXK.js → help-TQBGYOID.js} +1 -1
  135. package/dist/{history-LDGQ2IZJ.js → history-5TOOCF2Y.js} +15 -15
  136. package/dist/hyperframe.manifest.json +1 -1
  137. package/dist/hyperframe.runtime.iife.js +17 -17
  138. package/dist/hyperframes-player.global.js +8 -3
  139. package/dist/{info-KMXFLD3Q.js → info-ENI5MP4W.js} +20 -20
  140. package/dist/{init-D7GYHSX5.js → init-JXPXWV3G.js} +68 -68
  141. package/dist/{inspect-CUKWHCGS.js → inspect-WZNYQ5AB.js} +45 -44
  142. package/dist/{installer-EPRSH6QI.js → installer-3SGRBLJW.js} +7 -7
  143. package/dist/{keyframes-XCUPHBW3.js → keyframes-HEOC4CT4.js} +16 -16
  144. package/dist/{lambda-IMORFJHN.js → lambda-2VHQ4AL2.js} +15 -15
  145. package/dist/{layout-JD2IOBMS.js → layout-7WEUNO6T.js} +45 -44
  146. package/dist/{lint-FHLER36Y.js → lint-5YMAF3L7.js} +23 -23
  147. package/dist/{lintProject-ARKJXDQF.js → lintProject-C2ONSH2U.js} +4 -4
  148. package/dist/{list-MGCFG5MA.js → list-BIE3X7CO.js} +10 -10
  149. package/dist/{login-QX6M4UTR.js → login-YDIGJWCG.js} +7 -7
  150. package/dist/{logout-DKJANASY.js → logout-DDC4QLVK.js} +3 -3
  151. package/dist/{manager-IETAVBZS.js → manager-D2UV6RDQ.js} +16 -16
  152. package/dist/{manager-V2QCCPOJ.js → manager-UHWEKPXC.js} +8 -3
  153. package/dist/{media-treatment-MDAQRITV.js → media-treatment-FSKHPMWA.js} +33 -33
  154. package/dist/{media-use-4XXGABIL.js → media-use-JBN57JE3.js} +1 -1
  155. package/dist/{models-NZAOSI5A.js → models-COEK6LXG.js} +24 -24
  156. package/dist/{motionShot-6ZDUM2K4.js → motionShot-HYZ2ZGJQ.js} +28 -26
  157. package/dist/{normalize-audio-7PRYX6QM.js → normalize-audio-UXR6WQ7Q.js} +12 -12
  158. package/dist/{open-I254NY5J.js → open-OFT2GIDG.js} +24 -24
  159. package/dist/{parakeetRunner-TL3TOGUS.js → parakeetRunner-4NZ3QXS3.js} +25 -25
  160. package/dist/{pipeline-YPERVOQM.js → pipeline-ZKE54JMG.js} +18 -18
  161. package/dist/{play-MYI7BYKS.js → play-2VG77FT6.js} +39 -38
  162. package/dist/{policies-5NTZOHJA.js → policies-XXNGXWHV.js} +1 -1
  163. package/dist/{preflight-HRCSZ52D.js → preflight-QTWDIM5C.js} +18 -18
  164. package/dist/{present-WYXQDV4Q.js → present-OONXQLJG.js} +33 -33
  165. package/dist/{preview-535HTWQO.js → preview-6RZJFU76.js} +49 -49
  166. package/dist/{producer-C76CRJ5O.js → producer-6YM3UH3B.js} +1 -1
  167. package/dist/{progress-I37JB7R4.js → progress-NHJIHAAG.js} +2 -2
  168. package/dist/{projectConfig-5QCNTGQT.js → projectConfig-YMW4P2X6.js} +9 -9
  169. package/dist/{publication-2QT7VVE2.js → publication-SEINUAPZ.js} +5 -5
  170. package/dist/{publish-53EBL7OO.js → publish-KZBTBWFO.js} +27 -27
  171. package/dist/{refresh-MGCVWX56.js → refresh-RXTOPRBB.js} +3 -3
  172. package/dist/{remove-background-OBYHMPD4.js → remove-background-BIQNMIR7.js} +31 -31
  173. package/dist/{render-5BXTEEG7.js → render-65K3K6SD.js} +31 -31
  174. package/dist/{render-3MELF6Y3.js → render-FIH37HJA.js} +101 -96
  175. package/dist/{render-75CRB3BW.js → render-LW76HOMJ.js} +8 -8
  176. package/dist/{render-batch-CEVWUYBP.js → render-batch-POLEEYD4.js} +8 -8
  177. package/dist/renderSetupWorker.js +12 -9
  178. package/dist/{resolver-4ICE2AT6.js → resolver-O2SED3XB.js} +7 -7
  179. package/dist/{screenshotCapture-HXEZ3TNJ.js → screenshotCapture-UBY6TT75.js} +33 -6
  180. package/dist/{sherpa-L4UACXT3.js → sherpa-HTFFFTVQ.js} +24 -24
  181. package/dist/{sites-3ZBYB5X4.js → sites-MAVH57MO.js} +2 -2
  182. package/dist/skills/hyperframes/references/review-loop.md +1 -1
  183. package/dist/{skills-DXTQPCAO.js → skills-J6MBGS5O.js} +17 -17
  184. package/dist/{skillsUpdateCheck-ULXRGLDU.js → skillsUpdateCheck-ZAXNLBF3.js} +3 -3
  185. package/dist/{snapshot-PWFHQU5E.js → snapshot-TL7TTFS6.js} +72 -71
  186. package/dist/{src-RDSWHMJS.js → src-EL6HGIS4.js} +33 -26
  187. package/dist/{src-S7NVL5VF.js → src-Z5H5N5T4.js} +19 -19
  188. package/dist/{state-KAXGHF77.js → state-ORRPOLMQ.js} +2 -2
  189. package/dist/{staticProjectServer-GYPUQGI7.js → staticProjectServer-EO7X7RAY.js} +20 -20
  190. package/dist/{status-BV7QAUQD.js → status-CM7IQTU2.js} +6 -6
  191. package/dist/studio/assets/{hyperframes-player-DcD3NXpX.js → hyperframes-player-hz_VqxBZ.js} +7 -2
  192. package/dist/studio/assets/{index-BIDKYk0h.js → index-CV_ojgp5.js} +1 -1
  193. package/dist/studio/assets/{index-CFrZAwKo.js → index-S1ceEagc.js} +4 -4
  194. package/dist/studio/index.html +1 -1
  195. package/dist/{studio-api-IXGX5ZFI.js → studio-api-CUZDC5B3.js} +17 -17
  196. package/dist/{studioServer-LA5Z7RSS.js → studioServer-EZPRV43Y.js} +90 -84
  197. package/dist/{telemetry-STEMAMAX.js → telemetry-LFUVHARP.js} +10 -10
  198. package/dist/{telemetry-CQYHCCPL.js → telemetry-QG5AANZ4.js} +1 -1
  199. package/dist/{timeline-KLD24EN6.js → timeline-GSH743JE.js} +41 -41
  200. package/dist/{tokens-ICLORAA4.js → tokens-3ZMPSH7B.js} +3 -3
  201. package/dist/{transcribe-A6IKK7VS.js → transcribe-4SHNDPWW.js} +47 -47
  202. package/dist/{transcribe-CTHZLRXF.js → transcribe-TV7JBZQS.js} +19 -19
  203. package/dist/{tts-EDK3QS7M.js → tts-A2WILYGN.js} +6 -6
  204. package/dist/{updateCheck-FHCAAAXA.js → updateCheck-W7FTFOQF.js} +2 -2
  205. package/dist/{upgrade-7EV4F2R7.js → upgrade-7YYYNAPF.js} +3 -3
  206. package/dist/{urlDownloader-MIMGVASJ.js → urlDownloader-PQSUS2CP.js} +12 -12
  207. package/dist/{validate-LZF46W3V.js → validate-GCHAEVXM.js} +39 -38
  208. package/dist/{video-ZC47NFOL.js → video-KGN7NJS5.js} +16 -14
  209. package/dist/warmCheck.js +227 -0
  210. package/dist/warmCheckClient.js +139 -0
  211. package/package.json +4 -2
  212. package/dist/chunk-BAZ5LCR3.js +0 -3805
  213. package/dist/hyperframe-runtime.js +0 -1125
  214. package/dist/{chunk-B4VT6YU2.js → chunk-QGOYNPQT.js} +3 -3
  215. package/dist/{synthesize-I2C24XJ5.js → synthesize-PKTB5ATG.js} +1 -1
@@ -9,10 +9,10 @@ import {
9
9
  } from "./chunk-K2FLNJVB.js";
10
10
  import {
11
11
  trackCommandFailure
12
- } from "./chunk-5E5EYPZO.js";
12
+ } from "./chunk-DLC2FICN.js";
13
13
  import {
14
14
  failCommand
15
- } from "./chunk-PBN6GBJE.js";
15
+ } from "./chunk-JVBRJMOP.js";
16
16
 
17
17
  // src/utils/project.ts
18
18
  import { existsSync, statSync } from "fs";
@@ -8,36 +8,26 @@ import {
8
8
  auditClipDurations,
9
9
  shouldIgnoreHttpError,
10
10
  shouldIgnoreRequestFailure
11
- } from "./chunk-X7CCSMRR.js";
11
+ } from "./chunk-VAK7A2N6.js";
12
12
  import {
13
13
  checkSnapshotDirectory,
14
14
  rectToBbox
15
- } from "./chunk-RHWJKSGH.js";
15
+ } from "./chunk-KANNRHY7.js";
16
16
  import {
17
17
  ambiguousIssue,
18
18
  loadBrowserScript
19
- } from "./chunk-O5AE7HOP.js";
20
- import "./chunk-X7MTZ4T2.js";
21
- import "./chunk-OJDXABUF.js";
19
+ } from "./chunk-CJYAJ3QM.js";
22
20
  import {
23
21
  serveStaticProjectHtml
24
- } from "./chunk-IZM562YJ.js";
25
- import "./chunk-UVEQLDKB.js";
26
- import "./chunk-X7MTZ4T2.js";
27
- import "./chunk-XUHOIDKG.js";
28
- import "./chunk-JBCU6NR5.js";
29
- import "./chunk-IWTRHPTP.js";
30
- import "./chunk-TTVHYD5R.js";
31
- import "./chunk-6JR2XUEE.js";
22
+ } from "./chunk-Z4R35NJS.js";
32
23
  import {
33
24
  FfmpegUnavailableError,
34
25
  decideMediaProxyEligibility,
26
+ getProxyCachePath,
35
27
  proxyVariantFor,
36
28
  resolveProxies,
37
29
  scanProjectMediaCodecMap
38
- } from "./chunk-KIO3R4QN.js";
39
- import "./chunk-ICMXC3MI.js";
40
- import "./chunk-ALVXFXUG.js";
30
+ } from "./chunk-GPE3WWTO.js";
41
31
  import {
42
32
  AUDIT_SEEK_OPTIONS,
43
33
  DEFAULT_ZOOM_PADDING_PX,
@@ -51,84 +41,21 @@ import {
51
41
  seekCompositionTimeline,
52
42
  seekInPage,
53
43
  waitForPreferredSeekTarget
54
- } from "./chunk-V2UNZ7QP.js";
55
- import "./chunk-FH7WODJH.js";
44
+ } from "./chunk-XOVHO3TT.js";
56
45
  import {
57
46
  BrowserCleanupError,
58
47
  closeManagedBrowser
59
- } from "./chunk-IL3GTCQY.js";
60
- import "./chunk-XSRUVMXK.js";
61
- import "./chunk-BRHI7EIA.js";
62
- import "./chunk-S3RYRF3W.js";
63
- import "./chunk-K2FLNJVB.js";
64
- import "./chunk-4OT3FWVV.js";
65
- import "./chunk-442JNXRM.js";
66
- import "./chunk-RGHQID2E.js";
48
+ } from "./chunk-GTE5WZAM.js";
67
49
  import {
68
50
  resolveAutoProxy
69
- } from "./chunk-XH262OWN.js";
70
- import "./chunk-XT7X6QCP.js";
71
- import "./chunk-4YYJOFKS.js";
72
- import "./chunk-HVW7ABXD.js";
73
- import "./chunk-WUQUR33W.js";
74
- import "./chunk-JHOCK3DG.js";
75
- import "./chunk-OFY6JTZC.js";
76
- import "./chunk-TO6JNTML.js";
77
- import "./chunk-AWDFDFI3.js";
78
- import "./chunk-P6LJ4Y32.js";
79
- import "./chunk-GMECXFAN.js";
80
- import "./chunk-5CS4T6C6.js";
81
- import "./chunk-5E5EYPZO.js";
82
- import "./chunk-K26FR4SM.js";
83
- import "./chunk-VWG7OQKU.js";
84
- import "./chunk-T6AGUTZJ.js";
85
- import "./chunk-S3S4TGEH.js";
86
- import "./chunk-54HJ63Q2.js";
87
- import "./chunk-PBN6GBJE.js";
88
- import "./chunk-ZTZA4UWZ.js";
89
- import "./chunk-KLIKCX6Q.js";
90
- import "./chunk-EVMY7IPL.js";
91
- import "./chunk-7FMUTGOH.js";
92
- import "./chunk-VAJIPSN6.js";
93
- import "./chunk-K4WIOZFP.js";
94
- import "./chunk-XUXGIA7H.js";
95
- import "./chunk-WERLJGIC.js";
96
- import "./chunk-ISN5GRYI.js";
97
- import "./chunk-XEWHUPFS.js";
98
- import "./chunk-EOVYQ3IG.js";
99
- import "./chunk-XT6MXC7A.js";
100
- import "./chunk-YPBIAONI.js";
101
- import "./chunk-4IEH6EAC.js";
102
- import "./chunk-W2LGJSEN.js";
103
- import "./chunk-LBQFLUIY.js";
104
- import "./chunk-BAZ5LCR3.js";
105
- import "./chunk-VC76R6W2.js";
106
- import "./chunk-UJKQWGFF.js";
107
- import "./chunk-YMS5FOMC.js";
108
- import "./chunk-OFQWTKPW.js";
109
- import "./chunk-DPVXBVLL.js";
110
- import "./chunk-634HSJ3J.js";
111
- import "./chunk-FXMKHHPO.js";
112
- import "./chunk-RQVDTPGD.js";
113
- import "./chunk-537IYAEE.js";
114
- import "./chunk-GK2FIKIQ.js";
115
- import "./chunk-6BNTGNGD.js";
116
- import "./chunk-VAS6HQX3.js";
117
- import "./chunk-OYLO6TYK.js";
118
- import "./chunk-32GKETR7.js";
119
- import "./chunk-BSQ7XANM.js";
120
- import "./chunk-SDYDNHEE.js";
121
- import "./chunk-TYXH3EKP.js";
122
- import "./chunk-IXLUTE6N.js";
51
+ } from "./chunk-K2Z5DZBS.js";
123
52
  import {
124
53
  normalizeErrorMessage
125
54
  } from "./chunk-KNU5COPB.js";
126
- import "./chunk-KGPLIH7B.js";
127
- import "./chunk-3GXQPCJC.js";
128
- import "./chunk-M2WBOQ2Q.js";
129
55
 
130
56
  // src/utils/checkBrowser.ts
131
- import { mkdirSync, writeFileSync } from "fs";
57
+ import { existsSync, mkdirSync, writeFileSync } from "fs";
58
+ import os from "os";
132
59
  import { join, resolve } from "path";
133
60
 
134
61
  // src/utils/gsapTweenTails.ts
@@ -268,12 +195,22 @@ async function preResolveHostileMediaProxies(projectDir, html, autoProxyOverride
268
195
  variant: proxyVariantFor(facts)
269
196
  };
270
197
  });
271
- const results = await resolveProxies(projectDir, sources);
198
+ const total = hostileEntries.length;
199
+ const toMake = sources.filter((source) => !proxyCached(projectDir, source)).length;
200
+ if (toMake > 0) {
201
+ console.error(
202
+ `[hyperframes] Making browser-playable copies of ${toMake} video${toMake === 1 ? "" : "s"} Chrome cannot decode. Only the first check of these files waits for this; later checks reuse the copies.`
203
+ );
204
+ }
205
+ let settled = 0;
206
+ const results = await resolveProxies(projectDir, sources, () => {
207
+ settled += 1;
208
+ if (toMake > 0) console.error(`[hyperframes] browser-playable copies: ${settled}/${total}`);
209
+ });
272
210
  const failures = sources.flatMap((source, index) => {
273
211
  const result = results[index];
274
212
  return result.status === "rejected" ? [{ ...source, reason: result.reason }] : [];
275
213
  });
276
- const total = hostileEntries.length;
277
214
  console.error(
278
215
  `[hyperframes] media proxy pre-resolve: ${total - failures.length}/${total} ready, ${failures.length} failed (${Date.now() - startedAt}ms)`
279
216
  );
@@ -292,11 +229,18 @@ async function preResolveHostileMediaProxies(projectDir, html, autoProxyOverride
292
229
  }
293
230
  return { findings, failedPaths: new Set(failures.map(({ pathname }) => pathname)) };
294
231
  }
232
+ function proxyCached(projectDir, source) {
233
+ try {
234
+ return existsSync(getProxyCachePath(projectDir, source.sourcePath, source.variant));
235
+ } catch {
236
+ return false;
237
+ }
238
+ }
295
239
  function proxyFailedDraft(message) {
296
240
  return { code: "media_proxy_failed", severity: "warning", message, time: 0 };
297
241
  }
298
242
  async function runBrowserCheck(project, options, motion, runGrid, deadline, prelaunched) {
299
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-2WCR57IN.js");
243
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-OAYLYC4W.js");
300
244
  const html = await bundleWithLocalizedFonts(project.dir);
301
245
  const { findings: drafts, failedPaths } = await preResolveHostileMediaProxies(
302
246
  project.dir,
@@ -310,18 +254,15 @@ async function runBrowserCheck(project, options, motion, runGrid, deadline, prel
310
254
  [],
311
255
  options.autoProxy
312
256
  );
313
- let stamp = { time: 0 };
314
- const clock = {
315
- now: () => stamp,
316
- at: (time) => {
317
- stamp = { time };
318
- },
319
- during: (range) => {
320
- stamp = { time: range[0], timeRange: range };
321
- }
322
- };
257
+ const clock = createRuntimeClock();
323
258
  let failure = { kind: "none" };
324
259
  let chromeBrowser;
260
+ const helperSession = samplingBrowserCount(options) > 1 ? startHelperSession(html, server.url, options, deadline) : void 0;
261
+ const helperOpen = helperSession?.opened;
262
+ const helpers = helperOpen?.then(
263
+ (helper) => [helper.driver],
264
+ () => []
265
+ );
325
266
  try {
326
267
  const launchSettleStart = Date.now();
327
268
  const session = await openSettledCompositionPage(html, server.url, {
@@ -343,7 +284,7 @@ async function runBrowserCheck(project, options, motion, runGrid, deadline, prel
343
284
  await waitForPreferredSeekTarget(page);
344
285
  const rootAnchor = await resolveRootAnchor(page);
345
286
  const launchSettleMs = Date.now() - launchSettleStart;
346
- const { analyzeClipMediaFit } = await import("./src-RDSWHMJS.js");
287
+ const { analyzeClipMediaFit } = await import("./src-EL6HGIS4.js");
347
288
  for (const entry of await auditClipDurations(page, analyzeClipMediaFit, options.timeout)) {
348
289
  drafts.push({ code: "clip_media_fit", severity: entry.level, message: entry.text, time: 0 });
349
290
  }
@@ -351,14 +292,18 @@ async function runBrowserCheck(project, options, motion, runGrid, deadline, prel
351
292
  const message = tweenTailMessage(tail);
352
293
  drafts.push({ code: "gsap_tween_tail", severity: "warning", message, time: tail.later.end });
353
294
  }
354
- const driver = createPageDriver(page, clock);
355
- const result = await runGrid(driver, options, motion);
356
- const broken = await abortedImagesStillBroken(page, drafts);
295
+ const sampleLog = sampleWindow(drafts);
296
+ const driver = createPageDriver(page, clock, sampleLog);
297
+ const result = await runGrid(driver, options, motion, helpers);
298
+ helperSession?.stop();
299
+ const helper = await helperOpen?.catch(() => void 0);
300
+ const merged = helper ? mergeHelperDrafts(sampleLog, helper.sampleLog) : drafts;
301
+ const broken = await abortedImagesStillBroken(page, merged);
357
302
  return {
358
303
  ...result,
359
304
  timings: { ...result.timings, launchSettleMs },
360
305
  runtimeFindings: dropFailedProxyEchoes(
361
- keepBrokenImageAborts(drafts, broken),
306
+ keepBrokenImageAborts(merged, broken),
362
307
  failedPaths
363
308
  ).map((draft) => runtimeFinding(draft, rootAnchor))
364
309
  };
@@ -366,12 +311,87 @@ async function runBrowserCheck(project, options, motion, runGrid, deadline, prel
366
311
  failure = { kind: "failed", error };
367
312
  throw error;
368
313
  } finally {
369
- await closeCheckResources(chromeBrowser, server, failure);
314
+ helperSession?.stop();
315
+ await helperOpen?.catch(() => void 0);
316
+ await closeCheckResources([chromeBrowser, helperSession?.browser()], server, failure);
370
317
  }
371
318
  }
319
+ function createRuntimeClock() {
320
+ let stamp = { time: 0 };
321
+ return {
322
+ now: () => stamp,
323
+ at: (time) => {
324
+ stamp = { time };
325
+ },
326
+ during: (range) => {
327
+ stamp = { time: range[0], timeRange: range };
328
+ }
329
+ };
330
+ }
331
+ var SAMPLING_BROWSER_BYTES = 250 * 1024 * 1024;
332
+ function samplingBrowserCount(options, cores = os.availableParallelism(), free = Math.min(os.freemem(), process.availableMemory())) {
333
+ if (options.at?.length === 1) return 1;
334
+ return Math.max(1, Math.min(2, cores - 1, Math.floor(free / SAMPLING_BROWSER_BYTES)));
335
+ }
336
+ function sampleWindow(drafts) {
337
+ return { drafts, start: Number.POSITIVE_INFINITY, end: Number.POSITIVE_INFINITY };
338
+ }
339
+ function startHelperSession(html, url, options, deadline) {
340
+ const abort = new AbortController();
341
+ let browser;
342
+ const opened = openHelperSession(html, url, options, deadline, {
343
+ signal: deadline ? AbortSignal.any([deadline.signal, abort.signal]) : abort.signal,
344
+ onBrowser: (launched) => {
345
+ browser = launched;
346
+ deadline?.ownBrowser(launched);
347
+ }
348
+ });
349
+ return {
350
+ opened,
351
+ browser: () => browser,
352
+ stop: () => {
353
+ abort.abort();
354
+ if (browser) void closeManagedBrowser(browser).catch(() => void 0);
355
+ }
356
+ };
357
+ }
358
+ async function openHelperSession(html, url, options, deadline, owner) {
359
+ const sampleLog = sampleWindow([]);
360
+ const clock = createRuntimeClock();
361
+ const session = await openSettledCompositionPage(html, url, {
362
+ navigationTimeoutMs: options.timeout,
363
+ renderReadyTimeoutMs: options.timeout,
364
+ renderReadyWarningSuffix: "checking the current page state",
365
+ browserGpuMode: options.browserGpuMode ?? resolveCliChromeGpuMode(),
366
+ signal: owner.signal,
367
+ onBrowser: owner.onBrowser,
368
+ beforeNavigate: async (page) => {
369
+ wireRuntimeListeners(page, sampleLog.drafts, clock);
370
+ await deadline?.preparePage(page);
371
+ }
372
+ });
373
+ await waitForPreferredSeekTarget(session.page);
374
+ return {
375
+ driver: createPageDriver(session.page, clock, sampleLog),
376
+ sampleLog
377
+ };
378
+ }
379
+ var draftKey = (draft) => `${draft.code} ${draft.time} ${draft.message}`;
380
+ function mergeHelperDrafts(primary, helper) {
381
+ const window2 = ({ drafts, start: start2, end }) => drafts.slice(Math.min(start2, drafts.length), Math.min(end, drafts.length));
382
+ const own = window2(primary);
383
+ const seen = new Set(own.map(draftKey));
384
+ const extra = window2(helper).filter((draft) => !seen.has(draftKey(draft)));
385
+ const start = Math.min(primary.start, primary.drafts.length);
386
+ return [
387
+ ...primary.drafts.slice(0, start),
388
+ ...[...own, ...extra].sort((a, b) => a.time - b.time),
389
+ ...primary.drafts.slice(start + own.length)
390
+ ];
391
+ }
372
392
  async function captureFindingCrops(project, options, requests, deadline) {
373
393
  if (requests.length === 0) return [];
374
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-2WCR57IN.js");
394
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-OAYLYC4W.js");
375
395
  const html = await bundleWithLocalizedFonts(project.dir);
376
396
  const server = await serveStaticProjectHtml(
377
397
  project.dir,
@@ -415,12 +435,12 @@ async function captureFindingCrops(project, options, requests, deadline) {
415
435
  failure = { kind: "failed", error };
416
436
  throw error;
417
437
  } finally {
418
- await closeCheckResources(chromeBrowser, server, failure);
438
+ await closeCheckResources([chromeBrowser], server, failure);
419
439
  }
420
440
  }
421
- async function closeCheckResources(browser, server, failure) {
441
+ async function closeCheckResources(browsers, server, failure) {
422
442
  const cleanup = await Promise.allSettled([
423
- browser ? closeManagedBrowser(browser) : Promise.resolve(),
443
+ ...browsers.map((browser) => browser ? closeManagedBrowser(browser) : Promise.resolve()),
424
444
  server.close()
425
445
  ]);
426
446
  const errors = cleanup.filter((entry) => entry.status === "rejected").map((entry) => entry.reason);
@@ -598,9 +618,14 @@ function wireNetworkListeners(page, drafts, clock) {
598
618
  });
599
619
  });
600
620
  }
601
- function createPageDriver(page, clock) {
621
+ function createPageDriver(page, clock = createRuntimeClock(), sampleLog) {
602
622
  return {
603
623
  initialize: (contrast) => injectAuditScripts(page, contrast),
624
+ markSamples: (phase) => {
625
+ if (!sampleLog) return;
626
+ if (phase === "drop") sampleLog.start = sampleLog.end = Number.POSITIVE_INFINITY;
627
+ else sampleLog[phase] = sampleLog.drafts.length;
628
+ },
604
629
  matchComponents: (components, findings) => page.evaluate(matchComponentFindings, { components, findings }),
605
630
  getDuration: () => getCompositionDuration(page),
606
631
  hasNoTimelineDeclaration: () => hasNoTimelineDeclaration(page),
@@ -628,6 +653,12 @@ function createPageDriver(page, clock) {
628
653
  return issues;
629
654
  },
630
655
  collectLayoutGeometry: () => collectLayoutGeometry(page),
656
+ captureFrame: (scope) => captureFrame(page, scope),
657
+ framesDiffer: (first, second) => page.evaluate(
658
+ (a, b) => Reflect.apply(Reflect.get(window, "__hyperframesFramesDiffer"), window, [a, b]),
659
+ first,
660
+ second
661
+ ).then((differ) => differ === true),
631
662
  collectSeekClock: () => collectSeekClock(page),
632
663
  collectRotationSample: (time) => collectRotationSample(page, time),
633
664
  collectOffPivotRotationSample: (time) => collectOffPivotRotationSample(page, time),
@@ -806,6 +837,44 @@ async function collectOverlapGrid(page, times) {
806
837
  )
807
838
  );
808
839
  }
840
+ async function captureFrame(page, scope) {
841
+ if (!scope) return page.screenshot({ encoding: "base64", type: "png" });
842
+ try {
843
+ const box = await page.evaluate(isolateScopePaint, scope);
844
+ if (!box || box.width < 1 || box.height < 1) return "";
845
+ return await page.screenshot({
846
+ encoding: "base64",
847
+ type: "png",
848
+ clip: box,
849
+ omitBackground: true
850
+ });
851
+ } finally {
852
+ await page.evaluate(restoreScopePaint);
853
+ }
854
+ }
855
+ function isolateScopePaint(scope) {
856
+ let target = null;
857
+ try {
858
+ target = document.querySelector(scope);
859
+ } catch {
860
+ return null;
861
+ }
862
+ if (!target) return null;
863
+ const visibility = getComputedStyle(target).visibility;
864
+ target.setAttribute("data-hf-capture-scope", "");
865
+ const style = document.createElement("style");
866
+ style.id = "__hf_capture_scope_style";
867
+ style.textContent = `:not([data-hf-capture-scope], [data-hf-capture-scope] *) { visibility: hidden !important; }
868
+ :root:not([data-hf-capture-scope]), body:not([data-hf-capture-scope]) { background: none !important; }
869
+ [data-hf-capture-scope] { visibility: ${visibility} !important; }`;
870
+ document.head.append(style);
871
+ const rect = target.getBoundingClientRect();
872
+ return { x: rect.left, y: rect.top, width: rect.width, height: rect.height };
873
+ }
874
+ function restoreScopePaint() {
875
+ document.getElementById("__hf_capture_scope_style")?.remove();
876
+ document.querySelector("[data-hf-capture-scope]")?.removeAttribute("data-hf-capture-scope");
877
+ }
809
878
  async function collectLayoutGeometry(page) {
810
879
  return page.evaluate(() => {
811
880
  const geometry = Reflect.get(window, "__hyperframesLayoutGeometry");
@@ -1476,13 +1545,17 @@ function matchComponentFindings({
1476
1545
  return matchesSelector(finding.selector) !== false || typeof container === "string" && matchesSelector(container) !== false;
1477
1546
  });
1478
1547
  }
1548
+
1479
1549
  export {
1550
+ preResolveHostileMediaProxies,
1551
+ runBrowserCheck,
1552
+ samplingBrowserCount,
1553
+ mergeHelperDrafts,
1480
1554
  captureFindingCrops,
1481
- captureOverviewShot,
1482
- collectSeekClock,
1483
- dropFailedProxyEchoes,
1484
1555
  keepBrokenImageAborts,
1485
- matchComponentFindings,
1486
- preResolveHostileMediaProxies,
1487
- runBrowserCheck
1556
+ dropFailedProxyEchoes,
1557
+ createPageDriver,
1558
+ collectSeekClock,
1559
+ captureOverviewShot,
1560
+ matchComponentFindings
1488
1561
  };
@@ -12,10 +12,10 @@ import {
12
12
  } from "./chunk-DCAI5DBR.js";
13
13
  import {
14
14
  createProjectConfig
15
- } from "./chunk-XH262OWN.js";
15
+ } from "./chunk-K2Z5DZBS.js";
16
16
  import {
17
17
  isHyperframesProject
18
- } from "./chunk-LBQFLUIY.js";
18
+ } from "./chunk-VFBAKPRC.js";
19
19
 
20
20
  // src/utils/desktopApp.ts
21
21
  import { spawn, spawnSync } from "child_process";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  stoppedByCancelSignal
9
- } from "./chunk-Y5GY6Y7A.js";
9
+ } from "./chunk-QX4GGPMY.js";
10
10
  import {
11
11
  DEFAULT_MODEL,
12
12
  ensureModel,
@@ -14,12 +14,12 @@ import {
14
14
  hasFFmpeg,
15
15
  pinnedWhisperModel,
16
16
  sha256File
17
- } from "./chunk-YMS6CJCD.js";
17
+ } from "./chunk-SAQYJLI6.js";
18
18
  import {
19
19
  findFFmpeg,
20
20
  findFFprobe,
21
21
  getFFmpegInstallHint
22
- } from "./chunk-3PULCIY5.js";
22
+ } from "./chunk-OH56PXFH.js";
23
23
  import {
24
24
  findWavChunk
25
25
  } from "./chunk-UOFAE5RF.js";
@@ -8,20 +8,20 @@ import {
8
8
  pinProjectRecord,
9
9
  realFilePath
10
10
  } from "./chunk-ALVXFXUG.js";
11
- import {
12
- isProjectIgnoredDir
13
- } from "./chunk-EVMY7IPL.js";
14
11
  import {
15
12
  atomicTempPath,
16
13
  isAtomicTempPath,
17
14
  replaceFileAtomically
18
15
  } from "./chunk-EOVYQ3IG.js";
16
+ import {
17
+ isProjectIgnoredDir
18
+ } from "./chunk-EVMY7IPL.js";
19
19
  import {
20
20
  isSafePath,
21
21
  mkdirWithinProject
22
22
  } from "./chunk-OFQWTKPW.js";
23
23
 
24
- // ../studio-server/dist/chunk-6PE5OD32.js
24
+ // ../studio-server/dist/chunk-XM2TJIF5.js
25
25
  import { randomUUID as randomUUID7 } from "crypto";
26
26
  import { mkdir as mkdir2, readdir as readdir3, rm as rm3, rmdir, writeFile } from "fs/promises";
27
27
  import {
@@ -174,6 +174,10 @@ var HistoryBusyError = class extends Error {
174
174
  pid;
175
175
  url;
176
176
  };
177
+ var WINDOWS_BUSY = /* @__PURE__ */ new Set(["EPERM", "EBUSY", "EACCES"]);
178
+ function busyOnWindows(error) {
179
+ return process.platform === "win32" && WINDOWS_BUSY.has(error.code ?? "");
180
+ }
177
181
  function alive(pid) {
178
182
  if (!Number.isInteger(pid) || pid <= 0) return false;
179
183
  try {
@@ -238,27 +242,36 @@ function servedBy(file, urlFile, pid) {
238
242
  return void 0;
239
243
  }
240
244
  }
245
+ function attemptClaim(file, urlFile, deadline) {
246
+ if (claim(file)) return "claimed";
247
+ const pid = ownerOf(file);
248
+ if (pid === null) return "retry";
249
+ if (!alive(pid) && evictDeadOwner(file)) return "retry";
250
+ if (Date.now() >= deadline) throw new HistoryBusyError(pid, servedBy(file, urlFile, pid));
251
+ return "wait";
252
+ }
241
253
  async function takeHistoryOwnership(home, waitMs, url) {
242
254
  const file = join(home, "owner.pid");
243
255
  const urlFile = join(home, "owner-url.json");
244
256
  const deadline = Date.now() + waitMs;
245
257
  mkdirSync(home, { recursive: true });
246
258
  for (; ; ) {
247
- if (claim(file)) {
248
- advertise(urlFile, url);
249
- let held = true;
250
- return () => {
251
- if (held && servedBy(file, urlFile, process.pid)) rmSync(urlFile, { force: true });
252
- if (held) releaseOwn(file);
253
- held = false;
254
- };
259
+ let next = "wait";
260
+ try {
261
+ next = attemptClaim(file, urlFile, deadline);
262
+ } catch (error) {
263
+ if (!busyOnWindows(error) || Date.now() >= deadline) throw error;
255
264
  }
256
- const pid = ownerOf(file);
257
- if (pid === null) continue;
258
- if (!alive(pid) && evictDeadOwner(file)) continue;
259
- if (Date.now() >= deadline) throw new HistoryBusyError(pid, servedBy(file, urlFile, pid));
260
- await new Promise((settle) => setTimeout(settle, 50));
261
- }
265
+ if (next === "claimed") break;
266
+ if (next === "wait") await new Promise((settle) => setTimeout(settle, 50));
267
+ }
268
+ advertise(urlFile, url);
269
+ let held = true;
270
+ return () => {
271
+ if (held && servedBy(file, urlFile, process.pid)) rmSync(urlFile, { force: true });
272
+ if (held) releaseOwn(file);
273
+ held = false;
274
+ };
262
275
  }
263
276
  var manifest = ".hyperframes/render-outputs.json";
264
277
  function readRenderOutputs(projectDir) {
@@ -6,11 +6,11 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  withOwner
9
- } from "./chunk-JMFJI26U.js";
9
+ } from "./chunk-O7N3A7PE.js";
10
10
  import {
11
11
  HistoryBusyError,
12
12
  beginArtifactCapture
13
- } from "./chunk-ICMXC3MI.js";
13
+ } from "./chunk-U6RXZNZE.js";
14
14
 
15
15
  // src/utils/artifactCapture.ts
16
16
  var SKIP_BUSY_HISTORY = { ownerWaitMs: 0 };
@@ -6,40 +6,40 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveProject
9
- } from "./chunk-OJDXABUF.js";
9
+ } from "./chunk-TJB4GAV6.js";
10
10
  import {
11
11
  installPageFunctionGuard,
12
12
  resolveCliChromeGpuMode,
13
13
  seekCompositionTimeline,
14
14
  waitForRuntimeReady
15
- } from "./chunk-V2UNZ7QP.js";
15
+ } from "./chunk-XOVHO3TT.js";
16
16
  import {
17
17
  resolveCompositionViewportFromHtml
18
18
  } from "./chunk-FH7WODJH.js";
19
19
  import {
20
20
  launchManagedBrowser,
21
21
  resolveManagedGpuMode
22
- } from "./chunk-IL3GTCQY.js";
22
+ } from "./chunk-GTE5WZAM.js";
23
23
  import {
24
24
  pageNavigationTimeoutMs
25
- } from "./chunk-XSRUVMXK.js";
25
+ } from "./chunk-B2SZZFWW.js";
26
26
  import {
27
27
  defineCommand
28
28
  } from "./chunk-S3S4TGEH.js";
29
29
  import {
30
30
  failCommand,
31
31
  setCommandExitCode
32
- } from "./chunk-PBN6GBJE.js";
32
+ } from "./chunk-JVBRJMOP.js";
33
33
  import {
34
34
  c
35
35
  } from "./chunk-ZTZA4UWZ.js";
36
- import {
37
- printDeprecationNotice,
38
- withMeta
39
- } from "./chunk-VAJIPSN6.js";
40
36
  import {
41
37
  decodeWellFormedEscapes
42
38
  } from "./chunk-BSQ7XANM.js";
39
+ import {
40
+ printDeprecationNotice,
41
+ withMeta
42
+ } from "./chunk-ANR6WOC3.js";
43
43
  import {
44
44
  normalizeErrorMessage
45
45
  } from "./chunk-KNU5COPB.js";
@@ -227,7 +227,7 @@ function extractCompositionErrorsFromLint(lintResult) {
227
227
  async function localizeRemoteAssets(html) {
228
228
  let dir;
229
229
  try {
230
- const { loadProducer } = await import("./producer-C76CRJ5O.js");
230
+ const { loadProducer } = await import("./producer-6YM3UH3B.js");
231
231
  const { localizeRemoteMediaSources, localizeRemoteImageSources, localizeRemoteFontFaces } = await loadProducer();
232
232
  dir = mkdtempSync(join(tmpdir(), "hf-validate-assets-"));
233
233
  const assetDir = dir;
@@ -248,10 +248,10 @@ async function localizeRemoteAssets(html) {
248
248
  }
249
249
  async function validateInBrowser(project, opts) {
250
250
  const projectDir = project.dir;
251
- const { bundleToSingleHtml } = await import("./compiler-U3W6CJW7.js");
252
- const { ensureBrowser } = await import("./manager-V2QCCPOJ.js");
253
- const { serveStaticProjectHtml } = await import("./staticProjectServer-GYPUQGI7.js");
254
- const { lintProject } = await import("./lintProject-ARKJXDQF.js");
251
+ const { bundleToSingleHtml } = await import("./compiler-27KQD7KW.js");
252
+ const { ensureBrowser } = await import("./manager-UHWEKPXC.js");
253
+ const { serveStaticProjectHtml } = await import("./staticProjectServer-EO7X7RAY.js");
254
+ const { lintProject } = await import("./lintProject-C2ONSH2U.js");
255
255
  const lintResult = await lintProject(projectDir);
256
256
  const compositionErrors = extractCompositionErrorsFromLint(lintResult);
257
257
  const html = await bundleToSingleHtml(projectDir);
@@ -272,9 +272,9 @@ async function validateInBrowser(project, opts) {
272
272
  try {
273
273
  const browser = await ensureBrowser();
274
274
  const puppeteer = await import("puppeteer-core");
275
- const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-RDSWHMJS.js");
275
+ const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-EL6HGIS4.js");
276
276
  const requestedGpuMode = resolveCliChromeGpuMode();
277
- const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalWebGpu } = await import("./gpuPolicy-4NNXESM7.js");
277
+ const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalWebGpu } = await import("./gpuPolicy-UDJT2MQK.js");
278
278
  const resolvedGpuMode = await resolveManagedGpuMode(requestedGpuMode, browser.executablePath);
279
279
  const requiresWebGpu = compositionRequiresWebGpu(html);
280
280
  const { gpuConfig, softwareWebGpu } = resolveLocalWebGpu(resolvedGpuMode, requiresWebGpu);