hyperframes 0.8.192 → 0.8.194

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 (189) hide show
  1. package/dist/{add-TZU2UW7A.js → add-47UAIWY4.js} +12 -12
  2. package/dist/{animatedGifPrep-NLAXC3VV.js → animatedGifPrep-TFSQZWK6.js} +8 -7
  3. package/dist/api.js +18 -17
  4. package/dist/{asset-JAJXA6LB.js → asset-AU7PZHXA.js} +2 -2
  5. package/dist/{assetCataloger-4WTX3J4I.js → assetCataloger-HC5N6WPT.js} +8 -7
  6. package/dist/{audio-XLWC7JKS.js → audio-7AWMZWBM.js} +14 -13
  7. package/dist/{auth-5K6X3NPJ.js → auth-GXH3QNDJ.js} +1 -1
  8. package/dist/{autoUpdate-RNV7SKGB.js → autoUpdate-GVGP5O2I.js} +3 -3
  9. package/dist/{backgroundChecks-QXLVZVGX.js → backgroundChecks-IUJM2Q35.js} +3 -3
  10. package/dist/backgroundChecksWorker.js +3 -3
  11. package/dist/{batchRender-THKSPDZR.js → batchRender-3XS2Y2Y4.js} +4 -4
  12. package/dist/{beats-K7CGCFVL.js → beats-U64B4S7Z.js} +9 -9
  13. package/dist/{benchmark-PHRDIXNL.js → benchmark-2YUPAI76.js} +9 -9
  14. package/dist/{browser-GN6R5ZSK.js → browser-DBFH7KXM.js} +5 -5
  15. package/dist/{bundleWithLocalizedFonts-C325UNR4.js → bundleWithLocalizedFonts-XWL7KSQJ.js} +2 -2
  16. package/dist/{capture-BZ7APOGQ.js → capture-E4VW75NM.js} +2 -2
  17. package/dist/{capture-6UBQFHZQ.js → capture-YWH7BPBI.js} +13 -12
  18. package/dist/{captureCompositionFrame-VORSCTWC.js → captureCompositionFrame-IG6S2OHG.js} +13 -12
  19. package/dist/{catalog-PHU2RUZ3.js → catalog-LZIZLZ34.js} +12 -12
  20. package/dist/{catch-up-HCNRM46J.js → catch-up-ZVNPIACY.js} +4 -4
  21. package/dist/{check-TJ5ZLB4I.js → check-EKEOD4UM.js} +38 -37
  22. package/dist/{checkBrowser-DWP7ZXJ7.js → checkBrowser-MYH6HPHH.js} +33 -32
  23. package/dist/{chunk-XF77MK3J.js → chunk-2AJU7PZ6.js} +1 -1
  24. package/dist/chunk-2D5WP2NI.js +3901 -0
  25. package/dist/{chunk-FBVUAH7N.js → chunk-2OYYNKJ4.js} +1 -1
  26. package/dist/{chunk-R2U2G4OS.js → chunk-37IHQVNQ.js} +1 -1
  27. package/dist/{chunk-IMSI7IFW.js → chunk-3OSBSUN3.js} +18 -18
  28. package/dist/{chunk-RHYOWDI6.js → chunk-3S3CXF4W.js} +2 -2
  29. package/dist/{chunk-YMQQXPD5.js → chunk-452UK7E7.js} +5 -12
  30. package/dist/{chunk-L2YGSAOL.js → chunk-4FVNEXSV.js} +3 -3
  31. package/dist/{chunk-7UZC4N62.js → chunk-4GMDL4N5.js} +1 -1
  32. package/dist/{chunk-YWRQHRDY.js → chunk-4PIPQPCW.js} +7 -7
  33. package/dist/{chunk-J2ASTCU6.js → chunk-4VSV56F2.js} +2 -2
  34. package/dist/{chunk-NXMYHJAL.js → chunk-4VYPICIA.js} +29 -1
  35. package/dist/{chunk-QX4TB4NH.js → chunk-52YJKWV3.js} +379 -127
  36. package/dist/{chunk-GANST5K3.js → chunk-54PZ2EQZ.js} +1 -1
  37. package/dist/{chunk-5IPKQHOL.js → chunk-B3GG3HJB.js} +1 -1
  38. package/dist/{chunk-2MCXIY4B.js → chunk-B7RJV74O.js} +28 -11
  39. package/dist/{chunk-VOM2HLUI.js → chunk-BK5YCT54.js} +3 -3
  40. package/dist/{chunk-RWGASWT7.js → chunk-BL4U6U52.js} +1 -0
  41. package/dist/{chunk-T6O5OLN2.js → chunk-BYADARIC.js} +2 -2
  42. package/dist/{chunk-VNPADTDD.js → chunk-CEUBYYVJ.js} +2 -2
  43. package/dist/{chunk-JCDYDF54.js → chunk-CEZH4AQT.js} +12 -2
  44. package/dist/{chunk-BY6OQ6XP.js → chunk-CZNSLFYD.js} +3 -1
  45. package/dist/{chunk-SBBQFPCJ.js → chunk-DT3JESJ6.js} +1 -1
  46. package/dist/{chunk-3CXIX6XS.js → chunk-DVQDBWQG.js} +4 -4
  47. package/dist/{chunk-K2AKVYNR.js → chunk-EB3XXHNO.js} +2 -2
  48. package/dist/{chunk-3FV5BVWS.js → chunk-EY7GKVPS.js} +2 -2
  49. package/dist/{chunk-W24SZ5FL.js → chunk-F2ASNL2K.js} +6 -9
  50. package/dist/{chunk-ODBYZIOH.js → chunk-F3B7CE3Q.js} +14 -14
  51. package/dist/{chunk-E3P3LJG6.js → chunk-FLREUEHW.js} +28 -11
  52. package/dist/{chunk-6XVKMBUA.js → chunk-FUA22HO4.js} +1 -1
  53. package/dist/{chunk-AEXVVABM.js → chunk-GAFEU6AB.js} +13 -10
  54. package/dist/{chunk-DIKAPMMF.js → chunk-GQVTTWZF.js} +144 -39
  55. package/dist/{chunk-7LLRMYP6.js → chunk-HCLBM2LQ.js} +2 -2
  56. package/dist/{chunk-AMZJFCOX.js → chunk-HG5ECUOR.js} +5 -5
  57. package/dist/{chunk-KZOZN4PI.js → chunk-HPGQPRHY.js} +3 -3
  58. package/dist/{chunk-BPKLUHFT.js → chunk-HQD7ODQB.js} +5 -5
  59. package/dist/{chunk-SK7TR7BL.js → chunk-JU4T4VAA.js} +4 -4
  60. package/dist/{chunk-MGBUWPXX.js → chunk-JVTWX5G3.js} +33 -8
  61. package/dist/{chunk-2J3NA3OB.js → chunk-JXTPNUSO.js} +83 -51
  62. package/dist/{chunk-2VXY3PEF.js → chunk-K2VXPQKC.js} +107 -94
  63. package/dist/chunk-K4MJX7SR.js +17 -0
  64. package/dist/{chunk-XX2PA4L3.js → chunk-KDEV5RIE.js} +7 -3
  65. package/dist/{chunk-MVIJTXN5.js → chunk-LMIDZIW2.js} +12 -12
  66. package/dist/{chunk-6WNLQI63.js → chunk-LOGKDQ3G.js} +3 -3
  67. package/dist/{chunk-IW5G323T.js → chunk-LTGTN2TH.js} +8 -9
  68. package/dist/{chunk-MEE4NTPZ.js → chunk-LZ4WPR3B.js} +2 -2
  69. package/dist/{chunk-32NB4VMH.js → chunk-M2VXARYK.js} +3 -2
  70. package/dist/{chunk-7RSY7SZN.js → chunk-MCFPMUMT.js} +2 -2
  71. package/dist/{chunk-BEOK6F26.js → chunk-MGSNFWGR.js} +2 -2
  72. package/dist/{chunk-ZEMDV6W2.js → chunk-MO6RTNYD.js} +1 -1
  73. package/dist/{chunk-7JJMT6LN.js → chunk-N33FO44R.js} +1 -1
  74. package/dist/{chunk-A4OI5ZNX.js → chunk-N3M3IU6S.js} +1 -1
  75. package/dist/{chunk-CXRZBWSH.js → chunk-NVVIFW3C.js} +10 -10
  76. package/dist/{chunk-E5V6WEMK.js → chunk-O2ILONGK.js} +10 -10
  77. package/dist/{chunk-4HCJOFMB.js → chunk-OJNNKHAZ.js} +94 -22
  78. package/dist/{chunk-QWLES6YV.js → chunk-PEHST4UY.js} +3 -3
  79. package/dist/{chunk-BV6YE455.js → chunk-POFJH2IS.js} +1 -1
  80. package/dist/{chunk-AR46ND2Q.js → chunk-PXK3ICU6.js} +1 -1
  81. package/dist/{chunk-LOKCBZYF.js → chunk-Q4HKC3O7.js} +3 -3
  82. package/dist/{chunk-J2BSUF6X.js → chunk-QJQTWTM7.js} +8 -3
  83. package/dist/{chunk-QFPBRZJD.js → chunk-ROEW726S.js} +1 -1
  84. package/dist/{chunk-OQL4AJ4X.js → chunk-RUPGFW5B.js} +6 -6
  85. package/dist/{chunk-5TRFLZ5Z.js → chunk-RZWJJCI7.js} +2 -2
  86. package/dist/{chunk-2HP5GIQ3.js → chunk-SNECH6QA.js} +1 -1
  87. package/dist/{chunk-REUL2KH2.js → chunk-ST35C4K6.js} +1 -1
  88. package/dist/{chunk-4E75LHAL.js → chunk-ST4SHO3S.js} +1 -1
  89. package/dist/{chunk-ULTKB5FC.js → chunk-TDYKVJTU.js} +548 -429
  90. package/dist/{chunk-WOKVXK4J.js → chunk-VHIBBDEI.js} +1 -1
  91. package/dist/{chunk-EKGGSAWR.js → chunk-VPON6DF2.js} +5 -5
  92. package/dist/{chunk-VRAXIQ6I.js → chunk-XYGULBFV.js} +2 -2
  93. package/dist/{chunk-PFRG5P32.js → chunk-Y3BT27Y7.js} +1 -1
  94. package/dist/{clean-2RNCTDBT.js → clean-NS2SDRK7.js} +21 -20
  95. package/dist/cli.js +54 -54
  96. package/dist/{cloud-NFIKESNZ.js → cloud-K4XQPWTY.js} +4 -4
  97. package/dist/{cloudrun-7224BCX3.js → cloudrun-BKOKXTXV.js} +6 -6
  98. package/dist/{compare-HL44MXVX.js → compare-ZAV773OL.js} +31 -30
  99. package/dist/{compiler-WF5QTXV7.js → compiler-CWHFCE3H.js} +5 -5
  100. package/dist/{component-ZBZXSJBR.js → component-OXA2ZWX3.js} +3 -3
  101. package/dist/{compositions-76P7LDDX.js → compositions-NKRVWCPE.js} +12 -11
  102. package/dist/{contactSheet-43ISAESM.js → contactSheet-5APX35L3.js} +1 -1
  103. package/dist/{delete-4YZBYOHJ.js → delete-HZ2LBCLC.js} +2 -2
  104. package/dist/{deploy-UGUUGYLF.js → deploy-FNDTZFF7.js} +1 -1
  105. package/dist/{deterministicFonts-RO2TCMLZ.js → deterministicFonts-RADD3BSX.js} +2 -2
  106. package/dist/{dist-5KKCRFPT.js → dist-2YTN2UGY.js} +3 -3
  107. package/dist/{dist-QQ26RUDV.js → dist-7OCZHNLY.js} +1 -1
  108. package/dist/{doctor-GGVUK4NB.js → doctor-6QWJGO5P.js} +14 -13
  109. package/dist/{events-V2VU4J3B.js → events-HTHOBIUN.js} +3 -3
  110. package/dist/{events-OXPTHVDB.js → events-MBKHVGXX.js} +2 -2
  111. package/dist/{feedback-HFZ5SCUK.js → feedback-X5QWTLEX.js} +8 -8
  112. package/dist/{ffmpeg-3VHY7GO3.js → ffmpeg-7GESJCCT.js} +9 -8
  113. package/dist/{figma-7SEZTLBJ.js → figma-SXOHFVJI.js} +3 -3
  114. package/dist/fontLocalizeCli.js +11 -10
  115. package/dist/{get-Y2S2PXCM.js → get-T2HI5FCK.js} +2 -2
  116. package/dist/{gpuPolicy-UHPOWRV5.js → gpuPolicy-5FABKW5G.js} +8 -7
  117. package/dist/{grade-compare-4VTXSQM5.js → grade-compare-JATGHA6Q.js} +37 -35
  118. package/dist/{gsapParser-UP3PNPC2.js → gsapParser-IEUSLYDJ.js} +11 -11
  119. package/dist/{gsapParserAcorn-OOTY2MVN.js → gsapParserAcorn-LZJKCFQI.js} +1 -1
  120. package/dist/{help-HXNOACHI.js → help-G6CIKCGS.js} +1 -1
  121. package/dist/{history-XDJUI4LC.js → history-CSJUHYTD.js} +9 -8
  122. package/dist/hyperframe.manifest.json +1 -1
  123. package/dist/hyperframe.runtime.iife.js +71 -65
  124. package/dist/hyperframes-player.global.js +3 -3
  125. package/dist/hyperframes-slideshow.global.js +1 -1
  126. package/dist/{info-KYRI3EZV.js → info-MTTUMW2C.js} +8 -8
  127. package/dist/{init-IL7EWMT5.js → init-LJYNI5EK.js} +30 -29
  128. package/dist/{inspect-TBNH23UC.js → inspect-HGDM2VJE.js} +31 -30
  129. package/dist/{installer-O2YMFSI4.js → installer-3XHURUDG.js} +5 -5
  130. package/dist/{keyframes-4GF62KAJ.js → keyframes-MSU7N53X.js} +59 -33
  131. package/dist/{lambda-JFL6M4XZ.js → lambda-2I2TIUSD.js} +8 -8
  132. package/dist/{layout-7MAEFR65.js → layout-KWOXZMN7.js} +31 -30
  133. package/dist/{lint-4AYHKYAM.js → lint-N53TLHFG.js} +7 -7
  134. package/dist/{lintProject-52SLJPRC.js → lintProject-EOUZA4EG.js} +1 -1
  135. package/dist/{list-3DP3D3MW.js → list-SHYPQC7U.js} +2 -2
  136. package/dist/{login-T54WQYRQ.js → login-TEB6PA3Y.js} +4 -4
  137. package/dist/{manager-MZIJY73J.js → manager-COSJVRAE.js} +2 -2
  138. package/dist/{manager-QROK2IH3.js → manager-PLRSZH5G.js} +10 -9
  139. package/dist/{media-treatment-4CXF7MSG.js → media-treatment-XTUKMIGE.js} +15 -14
  140. package/dist/{models-IS3I6JKU.js → models-4WKAPP2L.js} +14 -13
  141. package/dist/{motionShot-DVYJZOTQ.js → motionShot-PTKB4ILH.js} +17 -16
  142. package/dist/{normalize-audio-4527JIK4.js → normalize-audio-3NG326I2.js} +6 -6
  143. package/dist/{open-5JE46SAX.js → open-6S2LMF7R.js} +12 -12
  144. package/dist/{parakeetRunner-7JIJGJJ7.js → parakeetRunner-OEI35DVO.js} +15 -14
  145. package/dist/{pipeline-YEN3WFD2.js → pipeline-543FUKH4.js} +10 -9
  146. package/dist/{play-WFX67I7M.js → play-ETEGHP3B.js} +21 -21
  147. package/dist/{preflight-D377HVUZ.js → preflight-Y5IYUF2T.js} +11 -10
  148. package/dist/{present-XTSEKAC7.js → present-ZRSLMJ6J.js} +17 -17
  149. package/dist/{preview-5XH7EK6O.js → preview-CEJ3SVTY.js} +100 -65
  150. package/dist/{producer-TFFYF4ZM.js → producer-JFVFIV26.js} +1 -1
  151. package/dist/{projectConfig-6YUJHMCL.js → projectConfig-7EK3BS72.js} +7 -7
  152. package/dist/{publication-JK33Y55E.js → publication-Y54GYFMV.js} +3 -3
  153. package/dist/{publish-JHDGXWXU.js → publish-S3UJTPCV.js} +10 -10
  154. package/dist/{remove-background-P44MYAPJ.js → remove-background-YTATNQSI.js} +11 -10
  155. package/dist/{render-RBINWWP5.js → render-IIPXMSBO.js} +35 -34
  156. package/dist/{render-RJ3I4E3A.js → render-RN3W6YL4.js} +17 -16
  157. package/dist/{render-HJ34EGMN.js → render-WNIG4B3J.js} +6 -6
  158. package/dist/{render-batch-3D6XQYUC.js → render-batch-OYS3UQDB.js} +6 -6
  159. package/dist/renderSetupWorker.js +42 -4
  160. package/dist/{resolver-HCLTFZUW.js → resolver-OVCXVEDX.js} +5 -5
  161. package/dist/{sherpa-IPOUJM6Q.js → sherpa-NCSFD7S3.js} +14 -13
  162. package/dist/skills/hyperframes/references/format.md +1 -0
  163. package/dist/skills/media-use/scripts/lib/duck.mjs +18 -2
  164. package/dist/skills/media-use/scripts/lib/duck.test.mjs +79 -0
  165. package/dist/{skills-P67QEERC.js → skills-IUV3K3X7.js} +5 -5
  166. package/dist/{skillsUpdateCheck-IFMLRVIF.js → skillsUpdateCheck-NACBXMWW.js} +3 -3
  167. package/dist/{snapshot-4YM4NNWJ.js → snapshot-7S5USJ2I.js} +52 -46
  168. package/dist/{src-DCD3YMXX.js → src-CAR6PHI4.js} +10 -9
  169. package/dist/{src-SSV66L3F.js → src-HITT6NWG.js} +19 -6
  170. package/dist/{staticProjectServer-C7PPGLEQ.js → staticProjectServer-QR6VZBPT.js} +18 -18
  171. package/dist/studio/assets/{hyperframes-player-ChN3cOr0.js → hyperframes-player-DLOUZUct.js} +1 -1
  172. package/dist/studio/assets/{index-CHu83hHM.js → index-CAQ7OcNJ.js} +163 -163
  173. package/dist/studio/assets/{index-BYbFcRR0.js → index-D9kA6JUX.js} +1 -1
  174. package/dist/studio/index.html +1 -1
  175. package/dist/{studio-api-6YZ7PIQR.js → studio-api-HVNOJILH.js} +13 -11
  176. package/dist/{studioServer-EWHSE4GC.js → studioServer-3BG5FRJL.js} +53 -52
  177. package/dist/{telemetry-GGLBHZRZ.js → telemetry-PET2GFQG.js} +3 -3
  178. package/dist/{timeline-NKHQJXJ2.js → timeline-PVIC2Z5K.js} +20 -19
  179. package/dist/{tokens-FWNNDJ6R.js → tokens-4N46PWSF.js} +2 -2
  180. package/dist/{transcribe-TRPKXZ7L.js → transcribe-2DVBS7MH.js} +19 -18
  181. package/dist/{transcribe-VD2TMMC2.js → transcribe-IDC7JTM4.js} +13 -12
  182. package/dist/{updateCheck-CUPS6LU3.js → updateCheck-QRDVXU7I.js} +2 -2
  183. package/dist/{upgrade-23XO6MEX.js → upgrade-5CNE3TBH.js} +2 -2
  184. package/dist/{urlDownloader-YOAOONCK.js → urlDownloader-P2I25DFC.js} +7 -6
  185. package/dist/{validate-BWIW24G5.js → validate-CLR5PEOV.js} +25 -24
  186. package/dist/{video-XRXJS4GC.js → video-3CKZZBOB.js} +8 -7
  187. package/dist/warmCheck.js +38 -37
  188. package/package.json +1 -1
  189. package/dist/chunk-B2XLXD7V.js +0 -3897
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-AWDFDFI3.js";
18
18
  import {
19
19
  isBlockedNetworkHost
20
- } from "./chunk-QX4TB4NH.js";
20
+ } from "./chunk-52YJKWV3.js";
21
21
  import {
22
22
  DOMParser,
23
23
  parseHTML
@@ -981,7 +981,7 @@ async function downloadAndRewriteFonts(css, outputDir, options = {}) {
981
981
  return aLatin - bLatin;
982
982
  });
983
983
  const usedFontNames = /* @__PURE__ */ new Set();
984
- let rewritten = css;
984
+ const localFontPaths = /* @__PURE__ */ new Map();
985
985
  let count = 0;
986
986
  for (const [index, fontUrl] of sortedUrls.entries()) {
987
987
  const remainingMs = options.remainingMs?.() ?? 1e4;
@@ -1014,7 +1014,7 @@ async function downloadAndRewriteFonts(css, outputDir, options = {}) {
1014
1014
  const localPath = join(assetsDir, filename);
1015
1015
  const relativePath = `assets/fonts/${filename}`;
1016
1016
  writeCaptureFileSync(localPath, buffer);
1017
- rewritten = rewritten.split(fontUrl).join(relativePath);
1017
+ localFontPaths.set(fontUrl, relativePath);
1018
1018
  } else {
1019
1019
  drops.unavailable++;
1020
1020
  }
@@ -1022,6 +1022,10 @@ async function downloadAndRewriteFonts(css, outputDir, options = {}) {
1022
1022
  drops.unavailable++;
1023
1023
  }
1024
1024
  }
1025
+ const rewritten = css.replace(fontUrlRegex, (match2, url) => {
1026
+ const localPath = localFontPaths.get(url);
1027
+ return localPath ? match2.replace(url, localPath) : match2;
1028
+ });
1025
1029
  return { css: rewritten, drops };
1026
1030
  }
1027
1031
  function isPrivateUrl(url) {
@@ -7,19 +7,19 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  ambiguousIssue,
9
9
  loadBrowserScript
10
- } from "./chunk-CXRZBWSH.js";
10
+ } from "./chunk-NVVIFW3C.js";
11
11
  import {
12
12
  auditClipDurations,
13
13
  shouldIgnoreHttpError,
14
14
  shouldIgnoreRequestFailure
15
- } from "./chunk-ODBYZIOH.js";
15
+ } from "./chunk-F3B7CE3Q.js";
16
16
  import {
17
17
  serveStaticProjectHtml
18
- } from "./chunk-EKGGSAWR.js";
18
+ } from "./chunk-VPON6DF2.js";
19
19
  import {
20
20
  artifactDirectory,
21
21
  finishSnapshotRun
22
- } from "./chunk-4HCJOFMB.js";
22
+ } from "./chunk-OJNNKHAZ.js";
23
23
  import {
24
24
  FfmpegUnavailableError,
25
25
  decideMediaProxyEligibility,
@@ -27,7 +27,7 @@ import {
27
27
  proxyVariantFor,
28
28
  resolveProxies,
29
29
  scanProjectMediaCodecMap
30
- } from "./chunk-7RSY7SZN.js";
30
+ } from "./chunk-MCFPMUMT.js";
31
31
  import {
32
32
  AUDIT_SEEK_OPTIONS,
33
33
  DEFAULT_ZOOM_PADDING_PX,
@@ -41,17 +41,17 @@ import {
41
41
  seekCompositionTimeline,
42
42
  seekInPage,
43
43
  waitForPreferredSeekTarget
44
- } from "./chunk-E5V6WEMK.js";
44
+ } from "./chunk-O2ILONGK.js";
45
45
  import {
46
46
  BrowserCleanupError,
47
47
  closeManagedBrowser
48
- } from "./chunk-JCDYDF54.js";
48
+ } from "./chunk-CEZH4AQT.js";
49
49
  import {
50
50
  findStageProxyBox
51
- } from "./chunk-WOKVXK4J.js";
51
+ } from "./chunk-VHIBBDEI.js";
52
52
  import {
53
53
  resolveAutoProxy
54
- } from "./chunk-5IPKQHOL.js";
54
+ } from "./chunk-B3GG3HJB.js";
55
55
  import {
56
56
  normalizeErrorMessage
57
57
  } from "./chunk-T2EUWCJE.js";
@@ -389,7 +389,7 @@ function proxyFailedDraft(message) {
389
389
  return { code: "media_proxy_failed", severity: "warning", message, time: 0 };
390
390
  }
391
391
  async function runBrowserCheck(project, options, motion, runGrid, deadline, prelaunched) {
392
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-C325UNR4.js");
392
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-XWL7KSQJ.js");
393
393
  const html = await bundleWithLocalizedFonts(project.dir);
394
394
  deadline?.enter("copies");
395
395
  const { findings: drafts, failedPaths } = await preResolveHostileMediaProxies(
@@ -442,7 +442,7 @@ async function runBrowserCheck(project, options, motion, runGrid, deadline, prel
442
442
  ).map((draft) => runtimeFinding(draft, rootAnchor))
443
443
  }));
444
444
  const launchSettleMs = Date.now() - launchSettleStart;
445
- const { analyzeClipMediaFit } = await import("./src-SSV66L3F.js");
445
+ const { analyzeClipMediaFit } = await import("./src-HITT6NWG.js");
446
446
  for (const entry of await auditClipDurations(page, analyzeClipMediaFit, options.timeout)) {
447
447
  drafts.push({ code: "clip_media_fit", severity: entry.level, message: entry.text, time: 0 });
448
448
  }
@@ -559,7 +559,7 @@ function mergeHelperDrafts(primary, helper) {
559
559
  }
560
560
  async function captureFindingCrops(project, options, requests, deadline) {
561
561
  if (requests.length === 0) return [];
562
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-C325UNR4.js");
562
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-XWL7KSQJ.js");
563
563
  const html = await bundleWithLocalizedFonts(project.dir);
564
564
  const server = await serveStaticProjectHtml(
565
565
  project.dir,
@@ -7,10 +7,10 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  parseFeedbackRating,
9
9
  trackRenderFeedback
10
- } from "./chunk-BV6YE455.js";
10
+ } from "./chunk-POFJH2IS.js";
11
11
  import {
12
12
  shouldTrack
13
- } from "./chunk-GANST5K3.js";
13
+ } from "./chunk-54PZ2EQZ.js";
14
14
  import {
15
15
  c
16
16
  } from "./chunk-ZTZA4UWZ.js";
@@ -84,7 +84,7 @@ async function getDoctorSummary() {
84
84
  try {
85
85
  const [{ getSystemMeta }, { findFFmpeg }] = await Promise.all([
86
86
  import("./system-7F3UEHQT.js"),
87
- import("./ffmpeg-3VHY7GO3.js")
87
+ import("./ffmpeg-7GESJCCT.js")
88
88
  ]);
89
89
  const sys = getSystemMeta();
90
90
  const parts = [
@@ -6,7 +6,10 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  runRenderSetupWorker
9
- } from "./chunk-RWGASWT7.js";
9
+ } from "./chunk-BL4U6U52.js";
10
+ import {
11
+ HYPERFRAMES_BROWSER_MARKER_ARG
12
+ } from "./chunk-K4MJX7SR.js";
10
13
  import {
11
14
  terminateProcessTree
12
15
  } from "./chunk-KGPLIH7B.js";
@@ -15,12 +18,8 @@ import {
15
18
  import { execFileSync } from "child_process";
16
19
  import { readFileSync } from "fs";
17
20
  function killOrphanedProcesses() {
18
- if (process.platform === "win32") return 0;
19
- return killOrphansMatching([
20
- "chrome-headless-shell",
21
- "chrome_headless_shell",
22
- "puppeteer_dev_chrome_profile"
23
- ]);
21
+ if (process.env.HYPERFRAMES_NO_ORPHAN_CLEANUP === "1" || process.platform === "win32") return 0;
22
+ return killOrphansMatching(HYPERFRAMES_BROWSER_MARKER_ARG);
24
23
  }
25
24
  async function killOrphanedProcessesForRender(signal) {
26
25
  return runRenderSetupWorker("orphan-cleanup", {}, { signal, timeoutMs: 15e3 });
@@ -162,7 +161,7 @@ function isProcessDescendant(childPid, ancestorPid, parentPid = processParentPid
162
161
  }
163
162
  return false;
164
163
  }
165
- function killOrphansMatching(markers) {
164
+ function killOrphansMatching(marker) {
166
165
  const uid = process.getuid?.();
167
166
  const owner = uid === void 0 ? ["-A"] : ["-U", String(uid)];
168
167
  let table;
@@ -178,7 +177,7 @@ function killOrphansMatching(markers) {
178
177
  for (const line of table.split("\n")) {
179
178
  const match = line.match(/^\s*(\d+)\s+(\d+)\s+(.*)$/);
180
179
  if (!match || match[2] !== "1") continue;
181
- if (!markers.some((marker) => match[3].includes(marker))) continue;
180
+ if (!match[3].split(/\s+/).includes(marker)) continue;
182
181
  killProcessTree(Number(match[1]));
183
182
  killed++;
184
183
  }
@@ -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-7LLRMYP6.js";
9
+ } from "./chunk-HCLBM2LQ.js";
10
10
  import {
11
11
  HistoryBusyError,
12
12
  beginArtifactCapture
13
- } from "./chunk-4HCJOFMB.js";
13
+ } from "./chunk-OJNNKHAZ.js";
14
14
 
15
15
  // src/utils/artifactCapture.ts
16
16
  var SKIP_BUSY_HISTORY = { ownerWaitMs: 0 };
@@ -27,7 +27,7 @@ import {
27
27
  } from "./chunk-GMECXFAN.js";
28
28
  import {
29
29
  ITEM_TYPE_DIRS
30
- } from "./chunk-MGBUWPXX.js";
30
+ } from "./chunk-JVTWX5G3.js";
31
31
  import {
32
32
  realProjectRoot
33
33
  } from "./chunk-OFQWTKPW.js";
@@ -2879,7 +2879,8 @@ async function fetchItemManifest(name, type, baseUrl = DEFAULT_REGISTRY_URL, opt
2879
2879
  const url = registryPathUrl(baseUrl, dir, name, "registry-item.json");
2880
2880
  const cacheFile = cachePath(baseUrl, `${dir}__${name}`);
2881
2881
  const cached = readCacheEntry(cacheFile, validate);
2882
- if (cached && (isFresh(cached) || options?.cacheOnly)) return cached.data;
2882
+ if (cached && (options?.cacheOnly || !options?.skipCache && isFresh(cached)))
2883
+ return cached.data;
2883
2884
  if (options?.cacheOnly) throw new Error("not fetched after an earlier registry timeout");
2884
2885
  try {
2885
2886
  const item = await fetchJson(url, validate);
@@ -13,11 +13,11 @@ import {
13
13
  formatPreviewProxyBox,
14
14
  hdrToSdrToneMapFilter,
15
15
  parseFirstFrameColour
16
- } from "./chunk-MGBUWPXX.js";
16
+ } from "./chunk-JVTWX5G3.js";
17
17
  import {
18
18
  decodeAuthoredAttribute,
19
19
  scanHtmlOpeningTags
20
- } from "./chunk-2MCXIY4B.js";
20
+ } from "./chunk-B7RJV74O.js";
21
21
  import {
22
22
  mkdirWithinProject,
23
23
  realProjectRoot,
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveConfig,
9
9
  usesSoftwareWebGpu
10
- } from "./chunk-QX4TB4NH.js";
10
+ } from "./chunk-52YJKWV3.js";
11
11
 
12
12
  // src/browser/gpuPolicy.ts
13
13
  function resolveLocalBrowserGpuMode(browserGpuArg, envMode = process.env.PRODUCER_BROWSER_GPU_MODE) {
@@ -17,7 +17,7 @@ function resolveLocalBrowserGpuMode(browserGpuArg, envMode = process.env.PRODUCE
17
17
  return "auto";
18
18
  }
19
19
  async function resolveCaptureBrowserGpuMode(requestedMode, chromePath, probeLifecycle) {
20
- const { resolveBrowserGpuMode } = await import("./src-SSV66L3F.js");
20
+ const { resolveBrowserGpuMode } = await import("./src-HITT6NWG.js");
21
21
  return resolveBrowserGpuMode(requestedMode, { chromePath, probeLifecycle });
22
22
  }
23
23
  function resolveLocalWebGpu(browserGpuMode, requiresWebGpu) {
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  updateCheckDisabled
9
- } from "./chunk-2HP5GIQ3.js";
9
+ } from "./chunk-SNECH6QA.js";
10
10
  import {
11
11
  hostAnswers
12
12
  } from "./chunk-K4WIOZFP.js";
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  sherpaParakeetInstalled,
9
9
  sherpaUnsupportedReason
10
- } from "./chunk-VOM2HLUI.js";
10
+ } from "./chunk-BK5YCT54.js";
11
11
  import {
12
12
  findParakeet
13
13
  } from "./chunk-JZIEZCQM.js";
@@ -1278,7 +1278,7 @@ async function withFigmaErrors(command, fn) {
1278
1278
  } catch (err) {
1279
1279
  if (err instanceof Error) {
1280
1280
  try {
1281
- const { trackCommandFailure } = await import("./events-V2VU4J3B.js");
1281
+ const { trackCommandFailure } = await import("./events-HTHOBIUN.js");
1282
1282
  trackCommandFailure(
1283
1283
  command,
1284
1284
  err,
@@ -6,27 +6,27 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveProject
9
- } from "./chunk-4E75LHAL.js";
9
+ } from "./chunk-ST4SHO3S.js";
10
10
  import {
11
11
  serveStaticProjectHtml
12
- } from "./chunk-EKGGSAWR.js";
12
+ } from "./chunk-VPON6DF2.js";
13
13
  import {
14
14
  AUDIT_SEEK_OPTIONS,
15
15
  installPageFunctionGuard,
16
16
  seekCompositionTimeline,
17
17
  waitForCompositionFonts,
18
18
  waitForRuntimeReady
19
- } from "./chunk-E5V6WEMK.js";
19
+ } from "./chunk-O2ILONGK.js";
20
20
  import {
21
21
  launchManagedBrowser,
22
22
  resolveManagedGpuMode
23
- } from "./chunk-JCDYDF54.js";
23
+ } from "./chunk-CEZH4AQT.js";
24
24
  import {
25
25
  gotoWhenSent
26
26
  } from "./chunk-MOEGCMKI.js";
27
27
  import {
28
28
  pageNavigationTimeoutMs
29
- } from "./chunk-QWLES6YV.js";
29
+ } from "./chunk-PEHST4UY.js";
30
30
  import {
31
31
  defineCommand
32
32
  } from "./chunk-S3S4TGEH.js";
@@ -40,7 +40,7 @@ import {
40
40
  import {
41
41
  printDeprecationNotice,
42
42
  withMeta
43
- } from "./chunk-2HP5GIQ3.js";
43
+ } from "./chunk-SNECH6QA.js";
44
44
  import {
45
45
  normalizeErrorMessage
46
46
  } from "./chunk-T2EUWCJE.js";
@@ -715,7 +715,7 @@ async function collectTweenBoundaries(page) {
715
715
  });
716
716
  }
717
717
  async function bundleProjectHtml(projectDir) {
718
- const { bundleToSingleHtml } = await import("./compiler-WF5QTXV7.js");
718
+ const { bundleToSingleHtml } = await import("./compiler-CWHFCE3H.js");
719
719
  return bundleToSingleHtml(projectDir);
720
720
  }
721
721
  async function alignViewportToComposition(page, url) {
@@ -732,15 +732,15 @@ async function alignViewportToComposition(page, url) {
732
732
  await gotoWhenSent(page, url, pageNavigationTimeoutMs());
733
733
  }
734
734
  async function runLayoutAudit(projectDir, opts) {
735
- const { ensureBrowser } = await import("./manager-MZIJY73J.js");
735
+ const { ensureBrowser } = await import("./manager-COSJVRAE.js");
736
736
  const puppeteer = await import("puppeteer-core");
737
- const { buildChromeArgs } = await import("./src-SSV66L3F.js");
737
+ const { buildChromeArgs } = await import("./src-HITT6NWG.js");
738
738
  const {
739
739
  assertWebGpuAdapterAvailable,
740
740
  compositionRequiresWebGpu,
741
741
  resolveLocalBrowserGpuMode,
742
742
  resolveLocalWebGpu
743
- } = await import("./gpuPolicy-UHPOWRV5.js");
743
+ } = await import("./gpuPolicy-5FABKW5G.js");
744
744
  const html = await bundleProjectHtml(projectDir);
745
745
  const server = await serveStaticProjectHtml(
746
746
  projectDir,
@@ -8,31 +8,31 @@ import {
8
8
  launchManagedBrowser,
9
9
  resolveManagedGpuMode,
10
10
  rethrowAfterBrowserCleanup
11
- } from "./chunk-JCDYDF54.js";
11
+ } from "./chunk-CEZH4AQT.js";
12
12
  import {
13
13
  gotoWhenSent
14
14
  } from "./chunk-MOEGCMKI.js";
15
15
  import {
16
16
  pageNavigationTimeoutMs,
17
17
  windowsChromeCrashRemediation
18
- } from "./chunk-QWLES6YV.js";
18
+ } from "./chunk-PEHST4UY.js";
19
19
  import {
20
20
  oneProcessOverPipe
21
21
  } from "./chunk-DKPNNYBZ.js";
22
22
  import {
23
23
  resolveCompositionViewportFromHtml
24
- } from "./chunk-WOKVXK4J.js";
24
+ } from "./chunk-VHIBBDEI.js";
25
25
  import {
26
26
  resolveLocalBrowserGpuMode,
27
27
  resolveLocalWebGpu
28
- } from "./chunk-BEOK6F26.js";
28
+ } from "./chunk-MGSNFWGR.js";
29
29
  import {
30
30
  c
31
31
  } from "./chunk-ZTZA4UWZ.js";
32
32
  import {
33
33
  assertWebGpuAdapterAvailable,
34
34
  compositionRequiresWebGpu
35
- } from "./chunk-QX4TB4NH.js";
35
+ } from "./chunk-52YJKWV3.js";
36
36
  import {
37
37
  normalizeErrorMessage
38
38
  } from "./chunk-T2EUWCJE.js";
@@ -140,7 +140,7 @@ async function waitForCompositionSettle(page, options) {
140
140
  console.warn(` ${c.warn("\u26A0")} Shader transitions did not finish pre-rendering`);
141
141
  });
142
142
  await waitForLateSubresources(page, options.lateSubresourceTimeoutMs ?? CAPTURE_SETTLE_MS);
143
- const { resolveConfig, waitForImagesReady } = await import("./src-SSV66L3F.js");
143
+ const { resolveConfig, waitForImagesReady } = await import("./src-HITT6NWG.js");
144
144
  const imageTimeoutMs = resolveConfig().playerReadyTimeout;
145
145
  await waitForImagesReady(
146
146
  page,
@@ -189,7 +189,7 @@ async function installPageFunctionGuard(page) {
189
189
  async function openSettledCompositionPage(html, url, options) {
190
190
  const viewport = resolveCompositionViewportFromHtml(html);
191
191
  const requiresWebGpu = compositionRequiresWebGpu(html);
192
- const answer = (await import("./staticProjectServer-C7PPGLEQ.js")).inProcessAnswer(url);
192
+ const answer = (await import("./staticProjectServer-QR6VZBPT.js")).inProcessAnswer(url);
193
193
  const noListen = answer !== void 0;
194
194
  let chromeBrowser;
195
195
  try {
@@ -200,7 +200,7 @@ async function openSettledCompositionPage(html, url, options) {
200
200
  options.onBrowserReady?.();
201
201
  const page = await chromeBrowser.newPage();
202
202
  await installPageFunctionGuard(page);
203
- const { installMediaRenderIdBridge } = await import("./src-SSV66L3F.js");
203
+ const { installMediaRenderIdBridge } = await import("./src-HITT6NWG.js");
204
204
  await installMediaRenderIdBridge(page);
205
205
  await page.setViewport(viewport);
206
206
  if (answer) await answerPageInProcess(page, url, answer);
@@ -216,10 +216,10 @@ async function openSettledCompositionPage(html, url, options) {
216
216
  }
217
217
  async function launchCompositionBrowser(html, noListen, options) {
218
218
  const viewport = resolveCompositionViewportFromHtml(html);
219
- const { ensureBrowser, findSystemBrowser } = await import("./manager-MZIJY73J.js");
219
+ const { ensureBrowser, findSystemBrowser } = await import("./manager-COSJVRAE.js");
220
220
  const browser = await ensureBrowser({ signal: options.signal });
221
221
  const puppeteer = await import("puppeteer-core");
222
- const { buildChromeArgs } = await import("./src-SSV66L3F.js");
222
+ const { buildChromeArgs } = await import("./src-HITT6NWG.js");
223
223
  const requestedGpuMode = options.browserGpuMode ?? resolveCliChromeGpuMode();
224
224
  const requiresWebGpu = compositionRequiresWebGpu(html);
225
225
  let softwareWebGpu = false;
@@ -21,7 +21,7 @@ import {
21
21
  mkdirWithinProject
22
22
  } from "./chunk-OFQWTKPW.js";
23
23
 
24
- // ../studio-server/dist/chunk-B4NDV4NM.js
24
+ // ../studio-server/dist/chunk-4HP26XV4.js
25
25
  import { randomUUID as randomUUID7 } from "crypto";
26
26
  import { mkdir as mkdir2, readdir as readdir3, rm as rm3, rmdir, stat as stat2, writeFile } from "fs/promises";
27
27
  import {
@@ -554,14 +554,41 @@ async function cloneOrCopy(from, to, beforeReplace) {
554
554
  throw error;
555
555
  }
556
556
  }
557
+ var listDir = (path) => readdir(path, { withFileTypes: true }).catch((error) => {
558
+ if (error.code === "ENOENT") return [];
559
+ throw error;
560
+ });
557
561
  async function openBlobStore(dir) {
558
562
  const sizes = /* @__PURE__ */ new Map();
563
+ const asideDir = join2(dirname(dir), "aside");
564
+ const asideSizes = /* @__PURE__ */ new Map();
565
+ const holds = /* @__PURE__ */ new Map();
559
566
  await mkdir(dir, { recursive: true });
560
- for (const shard of await readdir(dir))
561
- for (const hash of await readdir(join2(dir, shard)).catch(() => []))
562
- sizes.set(hash, (await stat(join2(dir, shard, hash))).size);
563
- const pathOf = (hash) => blobPath(dir, hash);
567
+ for (const [root, found] of [
568
+ [dir, sizes],
569
+ [asideDir, asideSizes]
570
+ ])
571
+ for (const shard of await listDir(root)) {
572
+ if (!shard.isDirectory()) {
573
+ if (shard.name.startsWith("incoming-")) await rm(join2(root, shard.name), { force: true });
574
+ continue;
575
+ }
576
+ for (const hash of await listDir(join2(root, shard.name)))
577
+ found.set(hash.name, (await stat(join2(root, shard.name, hash.name))).size);
578
+ }
579
+ for (const hash of asideSizes.keys()) holds.set(hash, /* @__PURE__ */ new Set(["*"]));
580
+ const pathOf = (hash) => blobPath(sizes.has(hash) ? dir : asideDir, hash);
564
581
  let total = [...sizes.values()].reduce((sum, size) => sum + size, 0);
582
+ const forget = async (hash) => {
583
+ await rm(blobPath(dir, hash), { force: true });
584
+ total -= sizes.get(hash) ?? 0;
585
+ sizes.delete(hash);
586
+ };
587
+ const forgetAside = async (hash) => {
588
+ await rm(blobPath(asideDir, hash), { force: true });
589
+ asideSizes.delete(hash);
590
+ holds.delete(hash);
591
+ };
565
592
  return {
566
593
  async put(absPath) {
567
594
  const temp = join2(dir, `incoming-${randomUUID3()}`);
@@ -575,35 +602,55 @@ async function openBlobStore(dir) {
575
602
  await rm(temp, { force: true });
576
603
  return hash;
577
604
  }
578
- await mkdir(dirname(pathOf(hash)), { recursive: true });
605
+ await mkdir(dirname(blobPath(dir, hash)), { recursive: true });
579
606
  const size = (await stat(temp)).size;
580
- await rename(temp, pathOf(hash));
607
+ await rename(temp, blobPath(dir, hash));
581
608
  sizes.set(hash, size);
582
609
  total += size;
583
610
  return hash;
584
611
  },
585
612
  reference: (absPath) => hashFile(absPath),
586
- has: (hash) => sizes.has(hash),
587
- read: async (hash) => readBlob(dir, hash),
613
+ has: (hash) => sizes.has(hash) || asideSizes.has(hash),
614
+ read: (hash) => readFile(pathOf(hash)),
588
615
  writeTo: async (hash, absPath, beforeReplace) => cloneOrCopy(pathOf(hash), absPath, beforeReplace),
616
+ async release(held) {
617
+ for (const [hash, path] of held) {
618
+ holds.get(hash)?.delete(path);
619
+ if (holds.get(hash)?.size === 0) await forgetAside(hash);
620
+ }
621
+ },
622
+ async keep(path, absPath, remove) {
623
+ const hash = await hashFile(absPath);
624
+ if (sizes.has(hash)) return;
625
+ if (asideSizes.has(hash)) {
626
+ holds.get(hash).add(path);
627
+ return;
628
+ }
629
+ const to = blobPath(asideDir, hash);
630
+ await mkdir(dirname(to), { recursive: true });
631
+ const moved = remove && await rename(absPath, to).then(
632
+ () => true,
633
+ () => false
634
+ );
635
+ if (!moved) {
636
+ const temp = join2(asideDir, `incoming-${randomUUID3()}`);
637
+ await cloneOrStream(absPath, temp).catch(async (error) => {
638
+ await rm(temp, { force: true });
639
+ throw error;
640
+ });
641
+ await rename(temp, to);
642
+ }
643
+ asideSizes.set(hash, (await stat(to)).size);
644
+ holds.set(hash, /* @__PURE__ */ new Set([path]));
645
+ },
589
646
  bytes: () => total,
590
647
  size: (hash) => sizes.get(hash) ?? 0,
591
648
  async drop(hashes) {
592
- for (const hash of hashes) {
593
- const size = sizes.get(hash);
594
- if (size === void 0) continue;
595
- await rm(pathOf(hash), { force: true });
596
- sizes.delete(hash);
597
- total -= size;
598
- }
649
+ for (const hash of hashes) if (sizes.has(hash)) await forget(hash);
599
650
  },
600
651
  async prune(keep) {
601
- for (const [hash, size] of sizes) {
602
- if (keep.has(hash)) continue;
603
- await rm(pathOf(hash), { force: true });
604
- sizes.delete(hash);
605
- total -= size;
606
- }
652
+ for (const hash of [...sizes.keys()]) if (!keep.has(hash)) await forget(hash);
653
+ for (const hash of [...asideSizes.keys()]) if (!keep.has(hash)) await forgetAside(hash);
607
654
  }
608
655
  };
609
656
  }
@@ -2288,6 +2335,9 @@ var Engine = class {
2288
2335
  this.windows.push(group);
2289
2336
  try {
2290
2337
  for (const [path, hash] of changes) await this.writeProjectFile(path, hash);
2338
+ await this.blobs.release(
2339
+ changes.flatMap(([path, hash]) => hash ? [[hash, path]] : [])
2340
+ );
2291
2341
  await this.sweep();
2292
2342
  } finally {
2293
2343
  this.windows = this.windows.filter((open) => open !== group);
@@ -2303,6 +2353,9 @@ var Engine = class {
2303
2353
  const version = hash === null ? DELETED_VERSION : hashVersion(hash);
2304
2354
  recordFileWriteReceipt(absPath, { path, version, writeToken });
2305
2355
  }
2356
+ const standing = lstatSync4(absPath, { throwIfNoEntry: false });
2357
+ if (standing?.isFile() && isUncopied(path, standing.size))
2358
+ await this.blobs.keep(path, absPath, hash === null);
2306
2359
  if (hash === null) {
2307
2360
  this.assertWritable();
2308
2361
  rmSync3(absPath, { force: true });
@@ -2388,6 +2441,18 @@ var Engine = class {
2388
2441
  [...this.tracked.keys()].map((path) => [path, null])
2389
2442
  );
2390
2443
  for (const [path, hash] of files) target.set(path, hash);
2444
+ if (point === START && this.adopting.size > 0) {
2445
+ throw new HistoryRefusedError(
2446
+ "The project's starting copy is still being saved; try again in a moment. Nothing was changed."
2447
+ );
2448
+ }
2449
+ const isProjectFile = (path) => !KEPT_HIDDEN_PATHS.has(path);
2450
+ const keepsAny = [...target].some(([path, hash]) => hash !== null && isProjectFile(path));
2451
+ if ([...this.tracked.keys()].some(isProjectFile) && !keepsAny) {
2452
+ throw new HistoryRefusedError(
2453
+ "Restoring this point would remove every file in this project, so nothing was changed."
2454
+ );
2455
+ }
2391
2456
  return this.writeAs(who, label, target, { restoredTo: point });
2392
2457
  }
2393
2458
  /** Settles, then runs `task` with its writes labelled `writeToken`. */
@@ -2507,6 +2572,12 @@ var HistoryClosedError = class extends Error {
2507
2572
  this.name = "HistoryClosedError";
2508
2573
  }
2509
2574
  };
2575
+ var HistoryRefusedError = class extends Error {
2576
+ constructor(message) {
2577
+ super(message);
2578
+ this.name = "HistoryRefusedError";
2579
+ }
2580
+ };
2510
2581
  async function openProjectHistory(options) {
2511
2582
  if (!existsSync3(options.projectDir))
2512
2583
  throw new HistoryClosedError(`${options.projectDir} is gone or now another project.`);
@@ -2664,6 +2735,7 @@ export {
2664
2735
  MAX_WINDOW_IDLE_MS,
2665
2736
  UNDO_MODES,
2666
2737
  HistoryClosedError,
2738
+ HistoryRefusedError,
2667
2739
  openProjectHistory,
2668
2740
  readProjectHistory,
2669
2741
  reclaimUncopiedBlobs,
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  readCompositionFps
9
- } from "./chunk-6XVKMBUA.js";
9
+ } from "./chunk-FUA22HO4.js";
10
10
  import {
11
11
  errorBox
12
12
  } from "./chunk-K2FLNJVB.js";
@@ -16,10 +16,10 @@ import {
16
16
  import {
17
17
  DEFAULT_CONFIG,
18
18
  resolvePageNavigationTimeout
19
- } from "./chunk-QX4TB4NH.js";
19
+ } from "./chunk-52YJKWV3.js";
20
20
  import {
21
21
  parseFps
22
- } from "./chunk-MGBUWPXX.js";
22
+ } from "./chunk-JVTWX5G3.js";
23
23
 
24
24
  // src/browser/windowsCrash.ts
25
25
  var STATUS_STACK_BUFFER_OVERRUN_DEC = "3221225595";
@@ -8,7 +8,7 @@ import {
8
8
  flush,
9
9
  shouldTrack,
10
10
  trackEvent
11
- } from "./chunk-GANST5K3.js";
11
+ } from "./chunk-54PZ2EQZ.js";
12
12
  import {
13
13
  CliRuntimeError
14
14
  } from "./chunk-JVBRJMOP.js";
@@ -10,7 +10,7 @@ import {
10
10
  isDevice,
11
11
  isQuality,
12
12
  render
13
- } from "./chunk-3CXIX6XS.js";
13
+ } from "./chunk-DVQDBWQG.js";
14
14
 
15
15
  // src/api/removeBackground.ts
16
16
  import { resolve } from "path";