hyperframes 0.8.122 → 0.8.124

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 (166) hide show
  1. package/dist/{add-UDNFUHR7.js → add-KDN5JOAP.js} +14 -14
  2. package/dist/{animatedGifPrep-2EXOFDLI.js → animatedGifPrep-H6ZIMS3L.js} +5 -5
  3. package/dist/{asset-YFEFDXZV.js → asset-EJFBLFOA.js} +2 -2
  4. package/dist/{assetCataloger-NDJSFPJN.js → assetCataloger-3Z4RUM5K.js} +2 -2
  5. package/dist/{auth-22YSZLEK.js → auth-QUOT4AVB.js} +2 -2
  6. package/dist/{autoUpdate-4OUJ7O3D.js → autoUpdate-LM6YIFM4.js} +2 -2
  7. package/dist/{backgroundChecks-FP5AP654.js → backgroundChecks-PZEX77KC.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-ZXQVHWED.js → batchRender-SYREZLNM.js} +3 -3
  10. package/dist/{beats-AML5JHGX.js → beats-GAROPWZX.js} +11 -11
  11. package/dist/{benchmark-6LELU6ZT.js → benchmark-R27INLK2.js} +11 -11
  12. package/dist/{browser-5NUYM6P2.js → browser-UAMARUY3.js} +8 -8
  13. package/dist/{bundleWithLocalizedFonts-TSGE3UAO.js → bundleWithLocalizedFonts-SJFCS4WH.js} +2 -2
  14. package/dist/{capture-HFYBSASN.js → capture-42GHDJSH.js} +13 -18
  15. package/dist/{capture-33BJRABG.js → capture-NT33PXQT.js} +2 -2
  16. package/dist/{catalog-KZ2PUXHS.js → catalog-DDLMJXPU.js} +14 -14
  17. package/dist/{check-RJQIUSVM.js → check-IQJEGVTI.js} +30 -30
  18. package/dist/{checkBrowser-QQZCRUSY.js → checkBrowser-QDTOZNUM.js} +33 -33
  19. package/dist/{chunk-2CYCP3AY.js → chunk-2C5KGTYX.js} +1 -1
  20. package/dist/{chunk-Q4GCD5WE.js → chunk-2X6IXODS.js} +5 -5
  21. package/dist/{chunk-A6DWJRHP.js → chunk-4HC572SI.js} +2 -2
  22. package/dist/{chunk-ABMHBIWX.js → chunk-5JLKZMCL.js} +1 -1
  23. package/dist/{chunk-BGYDTAYR.js → chunk-5UQEHMDX.js} +4 -4
  24. package/dist/{chunk-FD5UEKRP.js → chunk-5WAPJM7Q.js} +1 -1
  25. package/dist/{chunk-OZ4V6VQ2.js → chunk-72BGWI35.js} +3 -3
  26. package/dist/{chunk-2BMZEUGD.js → chunk-73KQTPK5.js} +1 -1
  27. package/dist/{chunk-7T6RZSKP.js → chunk-AIAHR2KP.js} +7 -7
  28. package/dist/{chunk-SSOJUJFQ.js → chunk-AOJIC4Z6.js} +1 -1
  29. package/dist/{chunk-TV2LRJVK.js → chunk-BDERXFDQ.js} +2 -2
  30. package/dist/{chunk-DQKPTQEA.js → chunk-BTJLBKJM.js} +5 -5
  31. package/dist/{chunk-NKS75GFI.js → chunk-CMH5CSTH.js} +2 -2
  32. package/dist/{chunk-OQ6HLIYU.js → chunk-CQMEZZGB.js} +9 -9
  33. package/dist/{chunk-NUWXK2NW.js → chunk-CSACVU42.js} +1 -1
  34. package/dist/{chunk-EB5XYJBZ.js → chunk-E5BAQVYP.js} +1 -1
  35. package/dist/chunk-F6QGSVUR.js +3571 -0
  36. package/dist/{chunk-J22NAGNW.js → chunk-FFRD7C5Y.js} +91 -27
  37. package/dist/chunk-GULOKZLI.js +155 -0
  38. package/dist/{chunk-ZIPAUKTK.js → chunk-HHUXXGXS.js} +1 -1
  39. package/dist/{chunk-74G66BSC.js → chunk-HQWCFX5E.js} +1 -1
  40. package/dist/{chunk-OHJGKETC.js → chunk-JTOXXJ2V.js} +1 -1
  41. package/dist/{chunk-LQBR4IC7.js → chunk-KAG5RIH3.js} +1 -1
  42. package/dist/{chunk-C477PVA2.js → chunk-LHUITV7D.js} +1 -1
  43. package/dist/{chunk-VP4IJ3NC.js → chunk-LVXNXV7G.js} +1 -1
  44. package/dist/{chunk-ZTWFHWRR.js → chunk-M73S37KU.js} +1 -1
  45. package/dist/{chunk-NA2DKY3M.js → chunk-N2NKZH5T.js} +9 -9
  46. package/dist/{dotEnv-AI4SYVTX.js → chunk-NGKM64BP.js} +2 -2
  47. package/dist/{chunk-UQR6DWPM.js → chunk-O2UUDQIA.js} +3 -3
  48. package/dist/{chunk-QR77QVIT.js → chunk-ONB7D3WM.js} +2 -2
  49. package/dist/{chunk-5KTDZVF3.js → chunk-ORICANJF.js} +1 -1
  50. package/dist/{chunk-3VG4A22C.js → chunk-PLQ4HJOO.js} +1 -1
  51. package/dist/{chunk-JD3C44FP.js → chunk-PSUC7UH5.js} +1 -1
  52. package/dist/{chunk-Y6WM6GY3.js → chunk-RG4XNPAS.js} +1 -1
  53. package/dist/{chunk-KCJGTEJD.js → chunk-RGAOEDD7.js} +1 -1
  54. package/dist/{chunk-26LWC4RP.js → chunk-RPVBIUYA.js} +2 -2
  55. package/dist/{chunk-DNIJ7MH6.js → chunk-SR2PZ7YB.js} +2 -2
  56. package/dist/{chunk-EBODC6OT.js → chunk-TAVCXJDZ.js} +3 -3
  57. package/dist/{chunk-UUI2OMI7.js → chunk-UB7TKYHI.js} +1 -1
  58. package/dist/{chunk-KJHOYQ2T.js → chunk-UZKSKWYC.js} +2 -2
  59. package/dist/{chunk-X6SS5FWY.js → chunk-VFCR64GO.js} +7 -7
  60. package/dist/{chunk-XIZHC6UO.js → chunk-W777U57N.js} +1 -1
  61. package/dist/{chunk-JQPICVXM.js → chunk-W7MBO3OA.js} +2 -2
  62. package/dist/{chunk-MOPVB4VL.js → chunk-WCO25Y7W.js} +2 -2
  63. package/dist/{chunk-VFZICECI.js → chunk-ZXKQI3CL.js} +1 -1
  64. package/dist/{clean-QXMDWVYB.js → clean-JUJTGQLY.js} +14 -14
  65. package/dist/cli.js +53 -52
  66. package/dist/{cloud-WTPVHGBP.js → cloud-OTGRJ55X.js} +4 -4
  67. package/dist/{cloudrun-JFN7W6XI.js → cloudrun-MR2BDNIE.js} +3 -3
  68. package/dist/{compare-CCDZEHTS.js → compare-PI2BE6XG.js} +24 -24
  69. package/dist/{compiler-DNZFJIKO.js → compiler-534QUPGQ.js} +2 -2
  70. package/dist/{component-OSVQHEQJ.js → component-23F5FX7F.js} +3 -3
  71. package/dist/{compositions-CCMN5HAA.js → compositions-QBMBMSWK.js} +10 -10
  72. package/dist/{delete-ZE7Z7SDY.js → delete-OWPF7ECQ.js} +2 -2
  73. package/dist/{dist-Z7QP5AQY.js → dist-UBW5W3J6.js} +2 -2
  74. package/dist/{doctor-KKRGCPV3.js → doctor-ET66NXTR.js} +9 -9
  75. package/dist/dotEnv-AECLXQSO.js +14 -0
  76. package/dist/{events-WJKCFVF7.js → events-IF4ANAI4.js} +7 -7
  77. package/dist/{events-YN5EY7O7.js → events-YB7V7HKA.js} +8 -8
  78. package/dist/{feedback-DHLYWTNU.js → feedback-BXKESP4T.js} +9 -9
  79. package/dist/{figma-KCTT7ELR.js → figma-HNCCW27E.js} +3 -3
  80. package/dist/fontLocalizeCli.js +7 -7
  81. package/dist/{get-XCGOGN53.js → get-BFS6LW4G.js} +2 -2
  82. package/dist/{gpuPolicy-J5CPE3TK.js → gpuPolicy-NTPPP3CY.js} +5 -5
  83. package/dist/{grade-compare-FBX5S77X.js → grade-compare-ZODD5CA2.js} +24 -24
  84. package/dist/{help-6TQVEU2Q.js → help-PDKEUTLM.js} +3 -2
  85. package/dist/{history-PPDOAO2Z.js → history-DPCZXCFM.js} +14 -14
  86. package/dist/hyperframe-runtime.js +50 -50
  87. package/dist/hyperframe.manifest.json +1 -1
  88. package/dist/hyperframe.runtime.iife.js +50 -50
  89. package/dist/hyperframes-player.global.js +1 -1
  90. package/dist/{info-42EBGTUI.js → info-BZBRLNDJ.js} +10 -10
  91. package/dist/{init-SERRMFRH.js → init-24RQT53L.js} +21 -21
  92. package/dist/{inspect-6TEDC7QZ.js → inspect-UUJSVALX.js} +25 -25
  93. package/dist/{installer-C47R4ZSU.js → installer-3MYH2BBT.js} +4 -4
  94. package/dist/{keyframes-BNLMFEWU.js → keyframes-ZBT47ZXP.js} +11 -11
  95. package/dist/{lambda-DGWKFO3L.js → lambda-254KZLDB.js} +4 -4
  96. package/dist/{layout-PMYXB4ZJ.js → layout-D7VXT7ZZ.js} +25 -25
  97. package/dist/{lint-DDNL3QQ5.js → lint-CIMEKZSB.js} +11 -11
  98. package/dist/{list-VCELX3BO.js → list-WBRIEQZM.js} +2 -2
  99. package/dist/{login-WC4YD67C.js → login-PBKOV6TK.js} +4 -4
  100. package/dist/{media-treatment-4QGIOHQR.js → media-treatment-XIBOCHGF.js} +11 -11
  101. package/dist/{models-UTVBFNKD.js → models-7UT4RZUL.js} +6 -6
  102. package/dist/{motionShot-3WDJAW4C.js → motionShot-WB7E5FU7.js} +11 -11
  103. package/dist/{normalize-audio-ZXESA45N.js → normalize-audio-PMU2FXZA.js} +10 -10
  104. package/dist/open-AVSLHVOE.js +115 -0
  105. package/dist/{pipeline-DRXU55OB.js → pipeline-5E76S72B.js} +5 -5
  106. package/dist/{play-AUEOCKY3.js → play-SVTXUB2Z.js} +19 -19
  107. package/dist/{preflight-OJJZVHWE.js → preflight-LGJKUHUZ.js} +6 -6
  108. package/dist/{present-7JZQMSSU.js → present-NE6EYZY2.js} +15 -15
  109. package/dist/{preview-3AMXHHVS.js → preview-4EGR22E3.js} +27 -22
  110. package/dist/{producer-QI55RCFB.js → producer-2ZWSHMK3.js} +1 -1
  111. package/dist/{projectConfig-EJNHN452.js → projectConfig-VC5MAYSS.js} +6 -6
  112. package/dist/{publication-SH4OD64P.js → publication-YXOCJQ7B.js} +2 -2
  113. package/dist/{publish-2B5LKGKK.js → publish-GTXVX6O4.js} +7 -7
  114. package/dist/{remove-background-EJ4SPMBK.js → remove-background-VOBXCXXJ.js} +6 -6
  115. package/dist/{render-JRYEUEAR.js → render-4PBKSNC3.js} +41 -23
  116. package/dist/{render-Y4OQV7BU.js → render-BNUTBDFX.js} +3 -3
  117. package/dist/{render-GWIDYUYW.js → render-M446K7E4.js} +11 -11
  118. package/dist/{render-batch-3F43JEX2.js → render-batch-WJKUYKUZ.js} +3 -3
  119. package/dist/{renderCancellation-WUM56H5O.js → renderCancellation-QUEUCG6R.js} +5 -5
  120. package/dist/{resolver-WHBQ7QFS.js → resolver-3QPZA2X6.js} +4 -4
  121. package/dist/{sherpa-5OYOKOOP.js → sherpa-LQHE6MT7.js} +6 -6
  122. package/dist/skills/hyperframes/SKILL.md +9 -0
  123. package/dist/skills/hyperframes/references/brief-contract.md +1 -1
  124. package/dist/skills/hyperframes/references/review-loop.md +1 -1
  125. package/dist/skills/hyperframes-cli/SKILL.md +2 -1
  126. package/dist/skills/media-use/audio/references/tts.md +24 -7
  127. package/dist/skills/media-use/audio/scripts/heygen-tts.mjs +3 -2
  128. package/dist/skills/media-use/audio/scripts/heygen-tts.test.mjs +38 -0
  129. package/dist/skills/media-use/audio/scripts/heygen-voice.mjs +98 -0
  130. package/dist/skills/media-use/audio/scripts/heygen-voice.test.mjs +233 -0
  131. package/dist/skills/media-use/audio/scripts/lib/heygen.mjs +19 -5
  132. package/dist/skills/media-use/audio/scripts/lib/heygen.test.mjs +17 -0
  133. package/dist/skills/media-use/audio/scripts/lib/tts.mjs +2 -2
  134. package/dist/{skills-JKBN3CQS.js → skills-C6C23Z7M.js} +10 -10
  135. package/dist/{skillsUpdateCheck-KUYRATKA.js → skillsUpdateCheck-MR5TXEAX.js} +3 -3
  136. package/dist/{snapshot-M7FF5DBZ.js → snapshot-F5ZSC5FM.js} +25 -25
  137. package/dist/{src-7NUMTCMB.js → src-HP5DTGMY.js} +6 -6
  138. package/dist/{src-S7FSBDSO.js → src-WEETQ4CZ.js} +4 -4
  139. package/dist/{staticProjectServer-AQFAOUJX.js → staticProjectServer-REKZ3KBB.js} +13 -13
  140. package/dist/{status-55DDWDMV.js → status-DKHWOUB4.js} +5 -5
  141. package/dist/studio/assets/{hyperframes-player-DMzBHhbH.js → hyperframes-player-ColOZ_78.js} +1 -1
  142. package/dist/studio/assets/{index-B-YDp8hN.js → index-BuSTrK-Z.js} +146 -146
  143. package/dist/studio/assets/{index-CBRX2eZX.js → index-CVuUfURE.js} +1 -1
  144. package/dist/studio/assets/{index-t1LH6H5H.css → index-D11atkBt.css} +1 -1
  145. package/dist/studio/assets/{index-lyjhSEzi.js → index-jQEqFKMk.js} +1 -1
  146. package/dist/studio/index.html +2 -2
  147. package/dist/studio/index.js +1250 -1043
  148. package/dist/studio/index.js.map +1 -1
  149. package/dist/studio/styles.css +1 -1
  150. package/dist/{studio-api-7RBB3E3E.js → studio-api-SY5SFHZD.js} +7 -7
  151. package/dist/{studioServer-5FPPFWL6.js → studioServer-2ZWULGC5.js} +79 -37
  152. package/dist/{system-BQ72Y6YD.js → system-L7VMXFIG.js} +5 -5
  153. package/dist/{telemetry-OIX76XCZ.js → telemetry-XYNKPYSU.js} +8 -8
  154. package/dist/{timeline-JWDLDSVO.js → timeline-MYGD5OEC.js} +14 -14
  155. package/dist/{tokens-HZKAUSHK.js → tokens-6DZ73AXR.js} +2 -2
  156. package/dist/{transcribe-G2HSKAJN.js → transcribe-3BUOOE6P.js} +11 -11
  157. package/dist/{transcribe-AQSGSWXV.js → transcribe-F4DDIZJO.js} +6 -6
  158. package/dist/{tts-P3LIPIL5.js → tts-CGUXR7R4.js} +1 -1
  159. package/dist/{updateCheck-Y6ICSKXS.js → updateCheck-VH46SJ2X.js} +2 -2
  160. package/dist/{upgrade-XU35HZ7O.js → upgrade-J4MZ4MLN.js} +2 -2
  161. package/dist/{urlDownloader-V7FRXT7U.js → urlDownloader-PCRAON2D.js} +4 -4
  162. package/dist/{validate-J2D2ZRPB.js → validate-BOYSXZFW.js} +15 -15
  163. package/dist/{video-MZPB3UAC.js → video-GL7ZDEFL.js} +5 -5
  164. package/package.json +1 -1
  165. package/dist/chunk-C6MUZ4T2.js +0 -3541
  166. package/dist/{synthesize-K62TIZWI.js → synthesize-BDXNRYZN.js} +4 -4
@@ -21,7 +21,7 @@ import {
21
21
  splitElementInHtml,
22
22
  unwrapElementsFromHtml,
23
23
  wrapElementsInHtml
24
- } from "./chunk-JQPICVXM.js";
24
+ } from "./chunk-W7MBO3OA.js";
25
25
  import {
26
26
  atomicTempPath,
27
27
  createFileAtomically,
@@ -34,7 +34,7 @@ import {
34
34
  measureAudio,
35
35
  requiredFfmpeg,
36
36
  resolveLocalAudioPath
37
- } from "./chunk-Y6WM6GY3.js";
37
+ } from "./chunk-RG4XNPAS.js";
38
38
  import {
39
39
  PROXY_PARAMS_VERSION,
40
40
  PROXY_PENDING_RETRY_AFTER_SECONDS,
@@ -60,7 +60,7 @@ import {
60
60
  shouldPrewarmProxy,
61
61
  waitForProxy,
62
62
  walkDir
63
- } from "./chunk-2BMZEUGD.js";
63
+ } from "./chunk-73KQTPK5.js";
64
64
  import {
65
65
  findTimelineScript,
66
66
  parseGsapScriptAcorn
@@ -81,7 +81,7 @@ import {
81
81
  motionPathPluginUrl,
82
82
  parseFps,
83
83
  sameInstant
84
- } from "./chunk-VP4IJ3NC.js";
84
+ } from "./chunk-LVXNXV7G.js";
85
85
  import {
86
86
  MagicString,
87
87
  VALID_CANVAS_RESOLUTIONS,
@@ -92,16 +92,17 @@ import {
92
92
  addScenePartsManifest,
93
93
  deferScriptsUntilFonts,
94
94
  ensureHfIds
95
- } from "./chunk-LQBR4IC7.js";
95
+ } from "./chunk-KAG5RIH3.js";
96
96
  import {
97
97
  findStartTags,
98
+ hasCompositionOutsideTemplates,
98
99
  injectTagsAtHeadStart,
99
100
  insertBeforeCloseTag,
100
101
  isFullHtmlDocument,
101
102
  resolveRateSpec,
102
103
  sourceTimeAt,
103
104
  stripEmbeddedRuntimeScripts
104
- } from "./chunk-C6MUZ4T2.js";
105
+ } from "./chunk-F6QGSVUR.js";
105
106
  import {
106
107
  ProjectRootMissingError,
107
108
  folderGone,
@@ -219,7 +220,7 @@ function stampFileHfIds(filePath) {
219
220
  }
220
221
  }
221
222
 
222
- // ../studio-server/dist/chunk-E3HLZKPI.js
223
+ // ../studio-server/dist/chunk-HY2KCPIA.js
223
224
  import { randomUUID as randomUUID6 } from "crypto";
224
225
  import { mkdir as mkdir2, readdir as readdir3, rm as rm3, rmdir, writeFile } from "fs/promises";
225
226
  import {
@@ -881,8 +882,10 @@ function readLog(file, onUnreadable) {
881
882
  return log;
882
883
  }
883
884
  function applyRecord(log, record) {
884
- if (record.type === "baseline") log.baseline = new Map(Object.entries(record.files));
885
- else if (record.type === "entry") log.entries.push(record.entry);
885
+ if (record.type === "baseline") {
886
+ log.baseline = new Map(Object.entries(record.files));
887
+ log.keepsLedger = record.keepsLedger === true;
888
+ } else if (record.type === "entry") log.entries.push(record.entry);
886
889
  else if (record.pinned) log.pins.add(record.id);
887
890
  else log.pins.delete(record.id);
888
891
  }
@@ -903,7 +906,11 @@ function saveRecord(file, log, record) {
903
906
  }
904
907
  function writeLog(file, log) {
905
908
  const records = [
906
- { type: "baseline", files: Object.fromEntries(log.baseline) },
909
+ {
910
+ type: "baseline",
911
+ files: Object.fromEntries(log.baseline),
912
+ ...log.keepsLedger && { keepsLedger: true }
913
+ },
907
914
  ...log.entries.map((entry) => ({ type: "entry", entry })),
908
915
  ...[...log.pins].map((id) => ({ type: "pin", id, pinned: true }))
909
916
  ];
@@ -985,6 +992,19 @@ var OUTSIDE = { kind: "outside", name: "Outside" };
985
992
  var OUTSIDE_LABEL = "Changed outside the app";
986
993
  var RACY_MS = 2e3;
987
994
  var statKey = (file, sweptAt) => sweptAt - Math.max(file.mtimeMs, file.ctimeMs) < RACY_MS ? "" : `${file.size}:${file.mtimeMs}:${file.ctimeMs}`;
995
+ var MEDIA_LEDGER = ".media/manifest.jsonl";
996
+ var KEPT_HIDDEN_PATHS = /* @__PURE__ */ new Set([...STUDIO_SIGNATURE_MANIFEST_PATHS, MEDIA_LEDGER]);
997
+ function isHistoryPath(path) {
998
+ if (KEPT_HIDDEN_PATHS.has(path)) return true;
999
+ return !path.split("/").some((segment) => segment.startsWith("."));
1000
+ }
1001
+ function withoutHiddenPaths(log) {
1002
+ for (const path of log.baseline.keys()) if (!isHistoryPath(path)) log.baseline.delete(path);
1003
+ for (const entry of log.entries)
1004
+ entry.files = entry.files.filter((file) => isHistoryPath(file.path));
1005
+ return log;
1006
+ }
1007
+ var historyFiles = (dir) => listProjectFiles(dir).filter((file) => isHistoryPath(file.path));
988
1008
  var sameWho = (a, b) => a.kind === b.kind && a.name === b.name;
989
1009
  function splitAt(change, at, kept) {
990
1010
  if (at === change.after) return [change, null];
@@ -1128,7 +1148,8 @@ var Engine = class {
1128
1148
  )
1129
1149
  );
1130
1150
  if (!log) return this.firstOpen();
1131
- this.log = log;
1151
+ this.log = withoutHiddenPaths(log);
1152
+ if (!this.log.keepsLedger) await this.takeInUnnamedLedger();
1132
1153
  const cache = this.readStatCache();
1133
1154
  const last = this.log.entries.at(-1)?.id ?? START;
1134
1155
  for (const [path, hash] of manifestAt(this.log, last) ?? []) {
@@ -1146,6 +1167,7 @@ var Engine = class {
1146
1167
  const replaced = hashOfVersion(fileContentVersion(bytes));
1147
1168
  if (!replaced || replaced === after) return;
1148
1169
  const path = relative2(realDir, absPath).split(sep2).join("/");
1170
+ if (!isHistoryPath(path)) return;
1149
1171
  this.overwritten.set(
1150
1172
  path,
1151
1173
  chainBackFrom(this.overwritten.get(path), replaced).set(after, replaced)
@@ -1176,14 +1198,23 @@ var Engine = class {
1176
1198
  const { id, who, label, startedAt, lastWriteAt, idleMs } = closed;
1177
1199
  this.windows.push({ id, who, label, startedAt, lastWriteAt, idleMs, changes: /* @__PURE__ */ new Map() });
1178
1200
  }
1201
+ async takeInUnnamedLedger() {
1202
+ const named = (path) => this.log.entries.some((entry) => entry.files.some((file) => file.path === path));
1203
+ const listed = () => historyFiles(this.dir).some((file) => file.path === MEDIA_LEDGER);
1204
+ const hash = this.log.baseline.has(MEDIA_LEDGER) || named(MEDIA_LEDGER) || !listed() ? null : await this.storeIfPresent(MEDIA_LEDGER);
1205
+ if (hash !== null) this.log.baseline.set(MEDIA_LEDGER, hash);
1206
+ this.log.keepsLedger = true;
1207
+ this.persistLog();
1208
+ }
1179
1209
  async firstOpen() {
1180
1210
  const sweptAt = this.now();
1181
- for (const file of listProjectFiles(this.dir)) {
1211
+ for (const file of historyFiles(this.dir)) {
1182
1212
  const hash = await this.storeIfPresent(file.path);
1183
1213
  if (this.whereFolder() !== "here") throw this.replaced();
1184
1214
  if (hash !== null) this.tracked.set(file.path, { hash, stat: statKey(file, sweptAt) });
1185
1215
  }
1186
1216
  this.log.baseline = this.manifest();
1217
+ this.log.keepsLedger = true;
1187
1218
  this.persistLog();
1188
1219
  this.saveStatCache();
1189
1220
  }
@@ -1211,7 +1242,7 @@ var Engine = class {
1211
1242
  if (this.whereFolder() !== "here") return;
1212
1243
  const sweptAt = this.now();
1213
1244
  const changedAt = (file) => Math.min(sweptAt, Math.max(file.mtimeMs, file.ctimeMs));
1214
- const seen = listProjectFiles(this.dir);
1245
+ const seen = historyFiles(this.dir);
1215
1246
  const heard = new Map(this.overwritten);
1216
1247
  const present = new Set(seen.map((file) => file.path));
1217
1248
  const removed = [...this.tracked.keys()].filter((path) => !present.has(path)).map((path) => {
@@ -1409,7 +1440,8 @@ var Engine = class {
1409
1440
  if (group) await this.commit(group);
1410
1441
  }
1411
1442
  async commit(group, extra = {}) {
1412
- if (!group.changes.size) return null;
1443
+ const undoesEmptied = this.log.entries.find((entry2) => entry2.id === extra.undoes)?.files.length === 0;
1444
+ if (!group.changes.size && !undoesEmptied) return null;
1413
1445
  const pending = this.pendingEntry(group);
1414
1446
  const endedAt = Math.max(pending.endedAt, this.log.entries.at(-1)?.endedAt ?? 0);
1415
1447
  const entry = { ...pending, endedAt, ...extra };
@@ -1467,7 +1499,9 @@ var Engine = class {
1467
1499
  }
1468
1500
  /** A watcher saw a write: one sweep per burst takes it in (a deleted folder is reported by its name alone). */
1469
1501
  noteChange(path) {
1470
- if (this.notedTimer || !affectsProjectSignature(this.dir, resolve3(this.dir, path))) return;
1502
+ const absolute = resolve3(this.dir, path);
1503
+ if (this.notedTimer || !affectsProjectSignature(this.dir, absolute)) return;
1504
+ if (!isHistoryPath(relative2(this.dir, absolute).split(sep2).join("/"))) return;
1471
1505
  this.notedTimer = setTimeout(() => {
1472
1506
  this.notedTimer = null;
1473
1507
  this.background(() => this.sweep());
@@ -1628,7 +1662,7 @@ var Engine = class {
1628
1662
  return stepTarget(
1629
1663
  this.log.entries,
1630
1664
  direction,
1631
- (entry) => mine(entry.who) || everyone && !ofOpenTurn(entry)
1665
+ (entry) => entry.files.length > 0 && (mine(entry.who) || everyone && !ofOpenTurn(entry))
1632
1666
  );
1633
1667
  }
1634
1668
  /** A pending group as the entry it becomes once committed (a window's part gets a fresh id). */
@@ -6586,7 +6620,7 @@ async function prepareGsapMutationScript(c, res, firstMutation) {
6586
6620
  let block = extractGsapScriptBlock(html);
6587
6621
  if (!block && (firstMutation.type === "add" || firstMutation.type === "add-with-keyframes")) {
6588
6622
  const compId = html.match(/data-composition-id="([^"]+)"/)?.[1] ?? "main";
6589
- const { GSAP_CDN } = await import("./dist-Z7QP5AQY.js");
6623
+ const { GSAP_CDN } = await import("./dist-UBW5W3J6.js");
6590
6624
  const bootstrap = [
6591
6625
  `<script src="${GSAP_CDN}"></script>`,
6592
6626
  "<script>",
@@ -6595,8 +6629,9 @@ async function prepareGsapMutationScript(c, res, firstMutation) {
6595
6629
  `window.__timelines["${compId}"] = tl;`,
6596
6630
  "</script>"
6597
6631
  ].join("\n");
6598
- html = insertBeforeCloseTag(html, "body", `${bootstrap}
6599
- `) ?? insertBeforeCloseTag(html, "template", `${bootstrap}
6632
+ const [first, second] = hasCompositionOutsideTemplates(html) ? ["body", "template"] : ["template", "body"];
6633
+ html = insertBeforeCloseTag(html, first, `${bootstrap}
6634
+ `) ?? insertBeforeCloseTag(html, second, `${bootstrap}
6600
6635
  `) ?? `${html}
6601
6636
  ${bootstrap}`;
6602
6637
  block = extractGsapScriptBlock(html);
@@ -8633,17 +8668,46 @@ function htmlHasMotionPathPlugin(html) {
8633
8668
  }
8634
8669
  function injectMotionPathPluginIfNeeded(html) {
8635
8670
  if (!htmlUsesMotionPath(html) || htmlHasMotionPathPlugin(html)) return html;
8636
- const gsapScript = /<script\b[^>]*\bsrc=["'][^"']*\/gsap(\.min)?\.js["'][^>]*>\s*<\/script>/i;
8637
- const match = html.match(gsapScript);
8638
- if (match) {
8639
- const version = match[0].match(/gsap@([\d.]+)/)?.[1];
8640
- const gsapTagType = match[0].match(/\stype=("[^"]*"|'[^']*')/i)?.[0] ?? "";
8641
- const pluginTag = `<script${gsapTagType} src="${motionPathPluginUrl(version)}"></script>`;
8642
- const end = html.indexOf(match[0]) + match[0].length;
8643
- return html.slice(0, end) + "\n" + pluginTag + html.slice(end);
8671
+ const gsap = findGsapCoreScript(html);
8672
+ if (gsap) {
8673
+ const version = gsap.src.match(/gsap@([\d.]+)/)?.[1];
8674
+ const ordering = `${gsap.type ? ` type="${gsap.type}"` : ""}${gsap.defer ? " defer" : ""}`;
8675
+ const pluginTag = `<script${ordering} src="${motionPathPluginUrl(version)}"></script>`;
8676
+ return html.slice(0, gsap.end) + "\n" + pluginTag + html.slice(gsap.end);
8644
8677
  }
8645
8678
  return injectScriptTagIntoHead(html, GSAP_MOTION_PATH_CDN_SCRIPT);
8646
8679
  }
8680
+ function isGsapCoreUrl(src) {
8681
+ const base = "http://localhost/";
8682
+ return URL.canParse(src, base) && /\/gsap(\.min)?\.js$/i.test(new URL(src, base).pathname);
8683
+ }
8684
+ function findGsapCoreScript(html) {
8685
+ const scripts = [...parseHTML(html).document.querySelectorAll("script")];
8686
+ const starts = findStartTags(html, "script");
8687
+ if (starts.length !== scripts.length) return null;
8688
+ const at = scripts.findIndex(
8689
+ (script) => isGsapCoreUrl(lowerCaseAttributes(script).get("src") ?? "")
8690
+ );
8691
+ if (at === -1) return null;
8692
+ const attributes = lowerCaseAttributes(scripts[at]);
8693
+ const end = scriptCloseEnd(html, starts[at]);
8694
+ if (end === 0) return null;
8695
+ return {
8696
+ src: attributes.get("src"),
8697
+ type: attributes.get("type") ?? null,
8698
+ defer: attributes.has("defer"),
8699
+ end
8700
+ };
8701
+ }
8702
+ function lowerCaseAttributes(el) {
8703
+ return new Map([...el.attributes].map((a) => [a.name.toLowerCase(), a.value]));
8704
+ }
8705
+ function scriptCloseEnd(html, start) {
8706
+ const close = /<\/script/gi;
8707
+ close.lastIndex = start;
8708
+ const closeAt = close.exec(html)?.index;
8709
+ return closeAt === void 0 ? 0 : html.indexOf(">", closeAt) + 1;
8710
+ }
8647
8711
  function injectStudioMotionDependencies(html, manifestContent) {
8648
8712
  const manifest = parseStudioMotionManifestContent(manifestContent);
8649
8713
  if (!manifest.hasMotion) return html;
@@ -0,0 +1,155 @@
1
+ import { createRequire as __hf_createRequire } from "node:module";
2
+ import { fileURLToPath as __hf_fileURLToPath } from "node:url";
3
+ import { dirname as __hf_dirname } from "node:path";
4
+ var require = __hf_createRequire(import.meta.url);
5
+ var __filename = __hf_fileURLToPath(import.meta.url);
6
+ var __dirname = __hf_dirname(__filename);
7
+
8
+ // src/utils/desktopApp.ts
9
+ import { spawn, spawnSync } from "child_process";
10
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
11
+ import { homedir } from "os";
12
+ import { basename, isAbsolute, join, relative, win32 } from "path";
13
+ var DESKTOP_BUNDLE_IDS = ["dev.hyperframes.desktop", "dev.hyperframes.desktop.canary"];
14
+ var DESKTOP_APP_NAMES = ["HyperFrames.app", "HyperFrames Canary.app"];
15
+ var APP_NAMES = ["HyperFrames", "HyperFrames Canary"];
16
+ var STUDIO_PAGE = "https://hyperframes.dev/studio";
17
+ var DOWNLOADS = {
18
+ darwin: `${STUDIO_PAGE}/download`,
19
+ linux: `${STUDIO_PAGE}/download?os=linux`
20
+ };
21
+ var desktopDownloadUrl = (platform = process.platform) => DOWNLOADS[platform] ?? null;
22
+ var downloadHint = (url) => `Keep editing by chatting with Framey in the HyperFrames desktop app \u2192 ${url}`;
23
+ var HANDOFF_READY = process.platform === "darwin";
24
+ var AGENT_HANDOFF_FILE = join(".hyperframes", "agent-handoff.json");
25
+ function agentSession(env = process.env) {
26
+ if (env.CLAUDE_CODE_SESSION_ID)
27
+ return { engine: "claude", sessionId: env.CLAUDE_CODE_SESSION_ID };
28
+ if (env.CODEX_THREAD_ID) return { engine: "codex", sessionId: env.CODEX_THREAD_ID };
29
+ return null;
30
+ }
31
+ var openWithBundle = (bundleId, dir) => spawnSync("open", ["-b", bundleId, dir], { stdio: "ignore" }).status === 0;
32
+ function launchApp(executable, dir) {
33
+ try {
34
+ const child = spawn(executable, [dir], { detached: true, stdio: "ignore" });
35
+ child.on("error", () => {
36
+ });
37
+ child.unref();
38
+ return true;
39
+ } catch {
40
+ return false;
41
+ }
42
+ }
43
+ var readText = (path) => {
44
+ try {
45
+ return readFileSync(path, "utf8");
46
+ } catch {
47
+ return null;
48
+ }
49
+ };
50
+ function launcherAppImage(text) {
51
+ try {
52
+ const launcher = JSON.parse(text ?? "null");
53
+ return typeof launcher === "object" && launcher !== null && "appImage" in launcher && typeof launcher.appImage === "string" ? launcher.appImage : null;
54
+ } catch {
55
+ return null;
56
+ }
57
+ }
58
+ function desktopApps({
59
+ platform = process.platform,
60
+ env = process.env,
61
+ home = homedir(),
62
+ exists = existsSync,
63
+ read = readText
64
+ } = {}) {
65
+ if (platform !== "win32" && platform !== "linux") return null;
66
+ const config = env.XDG_CONFIG_HOME || join(home, ".config");
67
+ const where = (name) => {
68
+ if (platform === "win32")
69
+ return env.LOCALAPPDATA ? win32.join(env.LOCALAPPDATA, "Programs", name, `${name}.exe`) : null;
70
+ const appImage = launcherAppImage(read(join(config, name, "launcher.json")));
71
+ return appImage && isAbsolute(appImage) ? appImage : null;
72
+ };
73
+ return APP_NAMES.flatMap((name, i) => {
74
+ const executable = where(name);
75
+ return executable && exists(executable) ? [{ executable, canary: i === 1 }] : [];
76
+ });
77
+ }
78
+ function leaveHandoff(dir, session) {
79
+ if (!session) return null;
80
+ try {
81
+ mkdirSync(join(dir, ".hyperframes"), { recursive: true });
82
+ writeFileSync(join(dir, AGENT_HANDOFF_FILE), JSON.stringify(session));
83
+ return session;
84
+ } catch {
85
+ return null;
86
+ }
87
+ }
88
+ function openInDesktop(dir, {
89
+ ready = HANDOFF_READY,
90
+ platform = process.platform,
91
+ open = openWithBundle,
92
+ launch = launchApp,
93
+ installed = () => desktopInstalled({ platform }),
94
+ env = process.env,
95
+ ...where
96
+ } = {}) {
97
+ const notOpened = (reason) => ({
98
+ opened: false,
99
+ reason,
100
+ downloadUrl: desktopDownloadUrl(platform) ?? STUDIO_PAGE
101
+ });
102
+ const opened = (canary) => ({
103
+ opened: true,
104
+ app: canary ? "HyperFrames Canary" : "the HyperFrames desktop app",
105
+ handedOver: leaveHandoff(dir, agentSession(env))
106
+ });
107
+ if (!ready) return notOpened("handoff-unavailable");
108
+ if (platform === "darwin") {
109
+ const bundleId = DESKTOP_BUNDLE_IDS.find((id) => open(id, dir));
110
+ if (!bundleId) return notOpened(installed() ? "open-failed" : "not-installed");
111
+ return opened(bundleId.endsWith(".canary"));
112
+ }
113
+ const apps = desktopApps({ platform, env, ...where });
114
+ if (!apps) return notOpened("unsupported-platform");
115
+ if (!apps.length) return notOpened("not-installed");
116
+ const app = apps.find(({ executable }) => launch(executable, dir));
117
+ return app ? opened(app.canary) : notOpened("open-failed");
118
+ }
119
+ function openCommandFor(dir, cwd = process.cwd()) {
120
+ const shown = relative(cwd, dir) || ".";
121
+ return `hyperframes open ${/\s/.test(shown) ? JSON.stringify(shown) : shown}`;
122
+ }
123
+ var spotlightFinds = (bundleId) => spawnSync("mdfind", [`kMDItemCFBundleIdentifier == '${bundleId}'`], { encoding: "utf8" }).stdout?.split("\n").some((path) => path.endsWith(".app") && !basename(path).startsWith(".")) ?? false;
124
+ function desktopInstalled({
125
+ spotlight = spotlightFinds,
126
+ ...where
127
+ } = {}) {
128
+ const { platform = process.platform, home = homedir(), exists = existsSync } = where;
129
+ if (platform !== "darwin") return (desktopApps(where)?.length ?? 0) > 0;
130
+ const folders = ["/Applications", join(home, "Applications")];
131
+ if (folders.some((folder) => DESKTOP_APP_NAMES.some((name) => exists(join(folder, name)))))
132
+ return true;
133
+ return DESKTOP_BUNDLE_IDS.some(spotlight);
134
+ }
135
+ function desktopHint(dir, {
136
+ env = process.env,
137
+ ready = HANDOFF_READY,
138
+ installed,
139
+ platform = process.platform
140
+ } = {}) {
141
+ if (env.HYPERFRAMES_DESKTOP_PROJECT) return null;
142
+ if (ready && (installed ?? desktopInstalled({ platform, env })))
143
+ return `Keep editing by chatting with Framey in the desktop app: ${openCommandFor(dir)}`;
144
+ const url = desktopDownloadUrl(platform);
145
+ return url ? downloadHint(url) : null;
146
+ }
147
+
148
+ export {
149
+ desktopDownloadUrl,
150
+ downloadHint,
151
+ HANDOFF_READY,
152
+ openInDesktop,
153
+ desktopInstalled,
154
+ desktopHint
155
+ };
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-AWDFDFI3.js";
15
15
  import {
16
16
  isBlockedNetworkHost
17
- } from "./chunk-NKS75GFI.js";
17
+ } from "./chunk-CMH5CSTH.js";
18
18
  import {
19
19
  DOMParser,
20
20
  parseHTML
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-ISN5GRYI.js";
18
18
  import {
19
19
  VERSION
20
- } from "./chunk-DNIJ7MH6.js";
20
+ } from "./chunk-SR2PZ7YB.js";
21
21
 
22
22
  // src/utils/updateCheck.ts
23
23
  import { existsSync, readFileSync } from "fs";
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
 
8
8
  // src/utils/producer.ts
9
9
  async function loadProducer() {
10
- return await import("./src-7NUMTCMB.js");
10
+ return await import("./src-HP5DTGMY.js");
11
11
  }
12
12
 
13
13
  export {
@@ -21,7 +21,7 @@ import {
21
21
  shouldClampResolvedMediaDuration,
22
22
  stripEmbeddedRuntimeScripts,
23
23
  warnUnknownEnumValues
24
- } from "./chunk-C6MUZ4T2.js";
24
+ } from "./chunk-F6QGSVUR.js";
25
25
  import {
26
26
  cssVariableName
27
27
  } from "./chunk-VC76R6W2.js";
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-PBN6GBJE.js";
16
16
  import {
17
17
  parseFps
18
- } from "./chunk-VP4IJ3NC.js";
18
+ } from "./chunk-LVXNXV7G.js";
19
19
 
20
20
  // src/browser/windowsCrash.ts
21
21
  var STATUS_STACK_BUFFER_OVERRUN_DEC = "3221225595";
@@ -17,7 +17,7 @@ import {
17
17
  parseStrictFiniteTimingNumber,
18
18
  resolveNaturalMediaTimelineDuration,
19
19
  resolveTimedImageDurationSeconds
20
- } from "./chunk-C6MUZ4T2.js";
20
+ } from "./chunk-F6QGSVUR.js";
21
21
  import {
22
22
  COMPOSITION_ATTRIBUTES,
23
23
  parseStartExpression
@@ -27,7 +27,7 @@ import {
27
27
  } from "./chunk-GMECXFAN.js";
28
28
  import {
29
29
  ITEM_TYPE_DIRS
30
- } from "./chunk-VP4IJ3NC.js";
30
+ } from "./chunk-LVXNXV7G.js";
31
31
  import {
32
32
  realProjectRoot
33
33
  } from "./chunk-OFQWTKPW.js";
@@ -6,24 +6,24 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  serveStaticProjectHtml
9
- } from "./chunk-EBODC6OT.js";
9
+ } from "./chunk-TAVCXJDZ.js";
10
10
  import {
11
11
  resolveProject
12
- } from "./chunk-FD5UEKRP.js";
12
+ } from "./chunk-5WAPJM7Q.js";
13
13
  import {
14
14
  AUDIT_SEEK_OPTIONS,
15
15
  installPageFunctionGuard,
16
16
  seekCompositionTimeline,
17
17
  waitForCompositionFonts,
18
18
  waitForRuntimeReady
19
- } from "./chunk-Q4GCD5WE.js";
19
+ } from "./chunk-2X6IXODS.js";
20
20
  import {
21
21
  launchManagedBrowser,
22
22
  resolveManagedGpuMode
23
- } from "./chunk-3VG4A22C.js";
23
+ } from "./chunk-PLQ4HJOO.js";
24
24
  import {
25
25
  resolveDiagnosticNavigationTimeoutMs
26
- } from "./chunk-C477PVA2.js";
26
+ } from "./chunk-LHUITV7D.js";
27
27
  import {
28
28
  c
29
29
  } from "./chunk-ZTZA4UWZ.js";
@@ -37,7 +37,7 @@ import {
37
37
  import {
38
38
  printDeprecationNotice,
39
39
  withMeta
40
- } from "./chunk-74G66BSC.js";
40
+ } from "./chunk-HQWCFX5E.js";
41
41
  import {
42
42
  normalizeErrorMessage
43
43
  } from "./chunk-KNU5COPB.js";
@@ -670,7 +670,7 @@ async function collectTweenBoundaries(page) {
670
670
  });
671
671
  }
672
672
  async function bundleProjectHtml(projectDir) {
673
- const { bundleToSingleHtml } = await import("./compiler-DNZFJIKO.js");
673
+ const { bundleToSingleHtml } = await import("./compiler-534QUPGQ.js");
674
674
  return bundleToSingleHtml(projectDir);
675
675
  }
676
676
  async function alignViewportToComposition(page, url) {
@@ -692,8 +692,8 @@ async function alignViewportToComposition(page, url) {
692
692
  async function runLayoutAudit(projectDir, opts) {
693
693
  const { ensureBrowser } = await import("./manager-CT3D67CG.js");
694
694
  const puppeteer = await import("puppeteer-core");
695
- const { buildChromeArgs } = await import("./src-S7FSBDSO.js");
696
- const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalBrowserGpuMode } = await import("./gpuPolicy-J5CPE3TK.js");
695
+ const { buildChromeArgs } = await import("./src-WEETQ4CZ.js");
696
+ const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalBrowserGpuMode } = await import("./gpuPolicy-NTPPP3CY.js");
697
697
  const html = await bundleProjectHtml(projectDir);
698
698
  const server = await serveStaticProjectHtml(
699
699
  projectDir,
@@ -7,7 +7,6 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  FEEDBACK_EMAIL_ENV
9
9
  } from "./chunk-IGLEPPTN.js";
10
- import "./chunk-M2WBOQ2Q.js";
11
10
 
12
11
  // src/utils/dotEnv.ts
13
12
  function valueOf(raw) {
@@ -31,9 +30,10 @@ function applyDotEnv(content, env) {
31
30
  for (const entry of content.split("\n").map(entryOf)) {
32
31
  if (!entry) continue;
33
32
  const [key, value] = entry;
34
- if (key && key !== FEEDBACK_EMAIL_ENV && !(key in env)) env[key] = value;
33
+ if (key && key.toUpperCase() !== FEEDBACK_EMAIL_ENV && !(key in env)) env[key] = value;
35
34
  }
36
35
  }
36
+
37
37
  export {
38
38
  applyDotEnv
39
39
  };
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-ZTZA4UWZ.js";
13
13
  import {
14
14
  getSystemMeta
15
- } from "./chunk-EB5XYJBZ.js";
15
+ } from "./chunk-E5BAQVYP.js";
16
16
  import {
17
17
  getInvocationId
18
18
  } from "./chunk-54HJ63Q2.js";
@@ -23,7 +23,7 @@ import {
23
23
  evaluateCanary,
24
24
  findCanary,
25
25
  parseCanaryOverride
26
- } from "./chunk-VP4IJ3NC.js";
26
+ } from "./chunk-LVXNXV7G.js";
27
27
  import {
28
28
  hostAnswers
29
29
  } from "./chunk-K4WIOZFP.js";
@@ -37,7 +37,7 @@ import {
37
37
  } from "./chunk-XUXGIA7H.js";
38
38
  import {
39
39
  VERSION
40
- } from "./chunk-DNIJ7MH6.js";
40
+ } from "./chunk-SR2PZ7YB.js";
41
41
 
42
42
  // src/telemetry/transport.ts
43
43
  import { spawn } from "child_process";
@@ -20,7 +20,7 @@ import {
20
20
  typeDirPath,
21
21
  updateRecord,
22
22
  withFigmaErrors
23
- } from "./chunk-NUWXK2NW.js";
23
+ } from "./chunk-CSACVU42.js";
24
24
  import {
25
25
  defineCommand
26
26
  } from "./chunk-S3S4TGEH.js";
@@ -221,7 +221,7 @@ var asset_default = defineCommand({
221
221
  rendered > 0 ? `(${results.length} nodes, ${rendered} rendered in 1 figma request)` : `(${results.length} nodes, all reused from cache \u2014 no figma request)`
222
222
  );
223
223
  }
224
- const { trackFigmaImport } = await import("./telemetry-OIX76XCZ.js");
224
+ const { trackFigmaImport } = await import("./telemetry-XYNKPYSU.js");
225
225
  trackFigmaImport({
226
226
  phase: "asset",
227
227
  reused: results.every((r) => r.reused),
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-TVCRUG2S.js";
14
14
  import {
15
15
  getFreeDiskMb
16
- } from "./chunk-EB5XYJBZ.js";
16
+ } from "./chunk-E5BAQVYP.js";
17
17
  import {
18
18
  ensureBrowser,
19
19
  findBrowser
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveCaptureBrowserGpuMode
9
- } from "./chunk-VFZICECI.js";
9
+ } from "./chunk-ZXKQI3CL.js";
10
10
  import {
11
11
  requestCliExit
12
12
  } from "./chunk-PBN6GBJE.js";
@@ -19,7 +19,7 @@ import {
19
19
  import {
20
20
  formatVariableValidationIssue,
21
21
  validateVariables
22
- } from "./chunk-VP4IJ3NC.js";
22
+ } from "./chunk-LVXNXV7G.js";
23
23
  import {
24
24
  extractCompositionMetadata
25
25
  } from "./chunk-F7MXHGU3.js";
@@ -8,7 +8,7 @@ import {
8
8
  MAX_AUDIO_GAIN_DB,
9
9
  formatAudioGain,
10
10
  isAudibleVideoElement
11
- } from "./chunk-C6MUZ4T2.js";
11
+ } from "./chunk-F6QGSVUR.js";
12
12
  import {
13
13
  findFfBinary
14
14
  } from "./chunk-PJ3HDUCY.js";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  updateNoticesSuppressed
9
- } from "./chunk-74G66BSC.js";
9
+ } from "./chunk-HQWCFX5E.js";
10
10
  import {
11
11
  hostAnswers
12
12
  } from "./chunk-K4WIOZFP.js";