hyperframes 0.8.138 → 0.8.140

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 (207) hide show
  1. package/dist/{add-IZQPSHT5.js → add-7SPPQB64.js} +20 -22
  2. package/dist/{animatedGifPrep-MQF3GRFW.js → animatedGifPrep-HN3CJSFX.js} +15 -8
  3. package/dist/{asset-RNZX4ISG.js → asset-AZMFUTRL.js} +3 -3
  4. package/dist/{assetCataloger-5YRUY3PJ.js → assetCataloger-TQUWYLHE.js} +6 -3
  5. package/dist/{auth-LUELYGJ4.js → auth-XGY74R4A.js} +7 -7
  6. package/dist/{autoUpdate-ECMQWUU5.js → autoUpdate-44NTJBQU.js} +2 -2
  7. package/dist/{backgroundChecks-PBEJMSA3.js → backgroundChecks-ET4DJEPG.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-2GXKBPFQ.js → batchRender-HTWWNF3P.js} +11 -8
  10. package/dist/beat-analyzer.global.js +5 -2
  11. package/dist/{beats-AAAZVDOY.js → beats-4GYTZUZG.js} +24 -17
  12. package/dist/{benchmark-EI767IB4.js → benchmark-CJQHE3QN.js} +20 -23
  13. package/dist/{browser-KAA2VXYH.js → browser-NXOVPGDG.js} +14 -28
  14. package/dist/{bundleWithLocalizedFonts-MWDYAPGB.js → bundleWithLocalizedFonts-6PJP54TC.js} +5 -5
  15. package/dist/{capture-IRRHK6BT.js → capture-5EHGRJZM.js} +2 -2
  16. package/dist/{capture-VYT5NQQI.js → capture-EHOMO4MP.js} +22 -15
  17. package/dist/{catalog-FYTZ2ET6.js → catalog-PTX5Z52R.js} +28 -30
  18. package/dist/{catch-up-XH3OAKQR.js → catch-up-I45SPSCU.js} +11 -25
  19. package/dist/{check-MUMIOK5K.js → check-LJ7LG7OI.js} +72 -54
  20. package/dist/{checkBrowser-LKSZFOU6.js → checkBrowser-6EK5E4PG.js} +81 -36
  21. package/dist/chunk-24OWOBQH.js +3656 -0
  22. package/dist/{chunk-3F6YLT72.js → chunk-2GMKWYEH.js} +12 -12
  23. package/dist/{chunk-KRLYIT22.js → chunk-5IKJONRY.js} +1 -1
  24. package/dist/chunk-6IHWCZ3W.js +54 -0
  25. package/dist/{chunk-P5WDMFBB.js → chunk-6U3MN4HW.js} +5 -106
  26. package/dist/chunk-A4KQZXZI.js +116 -0
  27. package/dist/{chunk-MKVKVMUH.js → chunk-ABJNXQUA.js} +10 -10
  28. package/dist/{chunk-YGXLBX3N.js → chunk-ASW6NWON.js} +1 -1
  29. package/dist/chunk-B3I3XJ47.js +3711 -0
  30. package/dist/{chunk-FSSMOTMS.js → chunk-BJ5JWOES.js} +1 -1
  31. package/dist/{chunk-OBC75KXL.js → chunk-BQKEGPPL.js} +1 -1
  32. package/dist/{chunk-SHB5VDMH.js → chunk-BRITLL56.js} +1 -1
  33. package/dist/{chunk-VR5UQWGV.js → chunk-C2JUHIG5.js} +6 -6
  34. package/dist/{chunk-YNBXJWSD.js → chunk-DDQ4LOML.js} +1 -1
  35. package/dist/{chunk-HUZYBV2Z.js → chunk-DQNOPYAG.js} +1 -1
  36. package/dist/{chunk-JH556Q42.js → chunk-EDYBFSPE.js} +2 -2
  37. package/dist/{chunk-SIMYRD5P.js → chunk-F3SPK6SO.js} +78 -20
  38. package/dist/chunk-FXMKHHPO.js +123 -0
  39. package/dist/chunk-G75ENCEZ.js +283 -0
  40. package/dist/{chunk-MIOBYUXT.js → chunk-GQJZORQP.js} +1 -1
  41. package/dist/{chunk-Y6W4DVPS.js → chunk-HKCNZITN.js} +1 -1
  42. package/dist/{chunk-APMG37MX.js → chunk-IFY57LUW.js} +1 -1
  43. package/dist/{chunk-JOUVZO7M.js → chunk-IRBESGJ7.js} +4 -4
  44. package/dist/chunk-JFKL3WAE.js +161 -0
  45. package/dist/{chunk-WH6PRFNX.js → chunk-JSGANFFH.js} +12 -3
  46. package/dist/{chunk-S3S2LSZX.js → chunk-KDPYVTEU.js} +2 -1
  47. package/dist/{chunk-PHXBLIKK.js → chunk-KECV5G4V.js} +165 -59
  48. package/dist/{chunk-SDRKEYZV.js → chunk-KFQNMY36.js} +8 -8
  49. package/dist/{chunk-QPOK6I32.js → chunk-KJLY2SDJ.js} +2 -2
  50. package/dist/{chunk-SZITAGRK.js → chunk-KMKWRIMC.js} +1 -1
  51. package/dist/{chunk-UUMK6VME.js → chunk-KOEWEFHK.js} +1 -1
  52. package/dist/{chunk-HXXX6N2G.js → chunk-L2H2L22P.js} +2 -2
  53. package/dist/{chunk-DJMXTKKK.js → chunk-LQG6GPVK.js} +1 -1
  54. package/dist/{chunk-GJGVYREG.js → chunk-MHK5DE2P.js} +268 -1964
  55. package/dist/{chunk-W3KQCJVP.js → chunk-MTVDXB6S.js} +18 -289
  56. package/dist/{chunk-IRYC5BRO.js → chunk-MU6C2VP6.js} +7 -7
  57. package/dist/{chunk-P75OFLZN.js → chunk-MUINFURL.js} +2 -2
  58. package/dist/{chunk-L5E5ZN6G.js → chunk-PB3P4MKP.js} +1 -1
  59. package/dist/{chunk-PHRWQQOJ.js → chunk-PE2I3AFA.js} +1 -1
  60. package/dist/{chunk-DXHYACUC.js → chunk-PFJFHNU3.js} +3 -3
  61. package/dist/{chunk-KBUUCAIZ.js → chunk-PPKFM5WE.js} +2 -2
  62. package/dist/{chunk-RH5VML6E.js → chunk-PUBKHEEA.js} +13 -13
  63. package/dist/{chunk-R6C6URKB.js → chunk-QBK7WKHT.js} +8 -8
  64. package/dist/{chunk-I3BRUEKD.js → chunk-QG3PDRSO.js} +1 -1
  65. package/dist/{chunk-RLNB3JCY.js → chunk-QP3BRKGF.js} +1 -163
  66. package/dist/chunk-QZ3AZTXI.js +1740 -0
  67. package/dist/{chunk-GNHJ4ONK.js → chunk-SLEPCESN.js} +2 -2
  68. package/dist/chunk-T76PLPD6.js +57 -0
  69. package/dist/{chunk-7Y5SMPRV.js → chunk-TPECLKPA.js} +168 -165
  70. package/dist/{chunk-IC5L6L7K.js → chunk-TYT2TLJR.js} +1 -1
  71. package/dist/{chunk-ASPTQ6DT.js → chunk-U7E736AJ.js} +1 -1
  72. package/dist/chunk-UOFAE5RF.js +42 -0
  73. package/dist/chunk-USDEMXXL.js +110 -0
  74. package/dist/{chunk-5K33TNUJ.js → chunk-VVJFZU6B.js} +2 -2
  75. package/dist/{chunk-XQODEVF3.js → chunk-WKTHUC2R.js} +1 -1
  76. package/dist/{chunk-7OLMGFDN.js → chunk-WQBA3MH4.js} +3 -3
  77. package/dist/{chunk-STA43FMY.js → chunk-WY5OODN5.js} +71 -3855
  78. package/dist/{chunk-JCRJBB4E.js → chunk-X3X3VETN.js} +8 -8
  79. package/dist/{chunk-ZTZ7NCJT.js → chunk-XTFJOR3K.js} +1 -1
  80. package/dist/chunk-YA62XGXS.js +45 -0
  81. package/dist/{clean-LZPDOAV4.js → clean-Y3AQITOX.js} +29 -20
  82. package/dist/cli.js +55 -55
  83. package/dist/{cloud-RVAH5NNL.js → cloud-TDPOMBZF.js} +7 -7
  84. package/dist/{cloudrun-NFGM6TRT.js → cloudrun-FPAVAVHP.js} +11 -8
  85. package/dist/commands/layout-audit.browser.js +37 -8
  86. package/dist/commands/motion-signature.browser.js +51 -2
  87. package/dist/{compare-S3M5OAL2.js → compare-LHL225ND.js} +40 -31
  88. package/dist/{compiler-SZ4GTYFB.js → compiler-RTU3KTLF.js} +7 -3
  89. package/dist/{component-PR2WZTQ4.js → component-L2YX7J56.js} +4 -4
  90. package/dist/{compositions-6RYXH2UA.js → compositions-V2UZKG7S.js} +23 -16
  91. package/dist/{delete-EO7C3LQ6.js → delete-OXZEXUQY.js} +8 -8
  92. package/dist/{dist-RVC3JTID.js → dist-N33CM63P.js} +21 -15
  93. package/dist/{dist-OJTEVNJR.js → dist-NZSQCYOF.js} +3 -1
  94. package/dist/{doctor-UTCCMN32.js → doctor-MWTPSIVD.js} +20 -13
  95. package/dist/{events-RE3OR6KY.js → events-4TZGQZWF.js} +6 -22
  96. package/dist/{events-RCGWL4LI.js → events-7VJJGC3D.js} +10 -23
  97. package/dist/{feedback-V7C64JIR.js → feedback-HSGAPVN7.js} +67 -45
  98. package/dist/{figma-26LOX5PV.js → figma-AMC6FAK3.js} +6 -6
  99. package/dist/fontLocalizeCli.js +17 -10
  100. package/dist/{get-E2K2JRTV.js → get-Y7DFEFYM.js} +8 -8
  101. package/dist/{gpuPolicy-Z3PQN6ZK.js → gpuPolicy-A45VSUKR.js} +15 -8
  102. package/dist/{grade-compare-OTZDU463.js → grade-compare-ERSA3OUI.js} +40 -31
  103. package/dist/{gsapParser-2OL54XZ5.js → gsapParser-UP3PNPC2.js} +3 -2
  104. package/dist/{help-IRSQLNI5.js → help-TW2AADLZ.js} +4 -4
  105. package/dist/{history-G44U6762.js → history-DKGDSVWF.js} +12 -30
  106. package/dist/hyperframe-runtime.js +59 -59
  107. package/dist/hyperframe.manifest.json +1 -1
  108. package/dist/hyperframe.runtime.iife.js +59 -59
  109. package/dist/hyperframes-player.global.js +3 -3
  110. package/dist/{info-KXQ2TAHX.js → info-I3NRRNX4.js} +17 -20
  111. package/dist/{init-7SXMLHJE.js → init-5Y3ZWZNF.js} +50 -41
  112. package/dist/{inspect-7JTINR25.js → inspect-BJQKBB3X.js} +39 -30
  113. package/dist/{installer-RH4E6WXT.js → installer-27K4JS2I.js} +8 -5
  114. package/dist/{keyframes-PIV573S6.js → keyframes-6V2NZO22.js} +14 -25
  115. package/dist/{lambda-GO5HAA4S.js → lambda-AIMF3K4A.js} +16 -13
  116. package/dist/{layout-N2736OO3.js → layout-YAPEBTU4.js} +39 -30
  117. package/dist/{lint-WUXZ5WWZ.js → lint-3LWWUIV7.js} +17 -23
  118. package/dist/{lintProject-ANMPLBIT.js → lintProject-LM3XZRPZ.js} +3 -1
  119. package/dist/{list-QF7AMX5F.js → list-NTSGEZJ6.js} +8 -8
  120. package/dist/{login-6RGSXHQJ.js → login-ZTDFGCCW.js} +9 -9
  121. package/dist/{logout-Q654A3SI.js → logout-GJXZQKOA.js} +5 -5
  122. package/dist/{media-treatment-T4KDEDYW.js → media-treatment-ARHX446F.js} +21 -20
  123. package/dist/{models-6JMNK3XI.js → models-VHNQVTHG.js} +20 -13
  124. package/dist/{motionShot-74WM7KF6.js → motionShot-35HCSNCI.js} +22 -15
  125. package/dist/{normalize-O76AC4HE.js → normalize-IGLHCWTF.js} +0 -4
  126. package/dist/{normalize-audio-ZZU36ZMD.js → normalize-audio-AUC73JH3.js} +13 -26
  127. package/dist/{open-G523K45B.js → open-C5LVNU3U.js} +11 -25
  128. package/dist/{pipeline-AKDGCWRE.js → pipeline-4GDTK54T.js} +15 -8
  129. package/dist/{play-SHIGXVON.js → play-U7UANF7Z.js} +38 -32
  130. package/dist/{preflight-6ERLORWK.js → preflight-Y5DN5D37.js} +3 -18
  131. package/dist/{present-QOYYNZCE.js → present-X6V6TX3E.js} +32 -26
  132. package/dist/{preview-KUXTDJL3.js → preview-K43RTRU2.js} +33 -26
  133. package/dist/{producer-CH33JXHK.js → producer-PVMFMW23.js} +1 -1
  134. package/dist/{projectConfig-NKIPRWAE.js → projectConfig-PI6MEN2T.js} +10 -7
  135. package/dist/{publication-4RBVVR5Z.js → publication-67C7KVTL.js} +6 -3
  136. package/dist/{publish-OLHR4Z4U.js → publish-RBV7EAMH.js} +27 -20
  137. package/dist/{refresh-K24ETHMA.js → refresh-MFITBIKV.js} +5 -5
  138. package/dist/{remove-background-NPKZSIPY.js → remove-background-Z2ECZX2Q.js} +22 -15
  139. package/dist/{render-UOKPAJNH.js → render-2GQMQBU3.js} +10 -7
  140. package/dist/{render-GYYGWYQC.js → render-EFU4BZRZ.js} +23 -26
  141. package/dist/{render-P4NWFUS7.js → render-YBS3XGRJ.js} +52 -32
  142. package/dist/{render-batch-ZDG3EXSD.js → render-batch-QC64OTB5.js} +11 -8
  143. package/dist/{renderCancellation-QYQLWHZY.js → renderCancellation-NTVU7IMB.js} +15 -8
  144. package/dist/renderSetupWorker.js +4 -2
  145. package/dist/{resolver-CWH3VVB7.js → resolver-GBWYG3EI.js} +8 -5
  146. package/dist/{sherpa-WEQE23S5.js → sherpa-ZW6PWJS4.js} +46 -14
  147. package/dist/sherpaWorker.js +11 -3
  148. package/dist/skills/hyperframes/references/capability-menu.md +1 -1
  149. package/dist/skills/hyperframes-cli/SKILL.md +5 -0
  150. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +1 -1
  151. package/dist/skills/hyperframes-cli/references/preview-render.md +1 -1
  152. package/dist/skills/media-use/SKILL.md +6 -4
  153. package/dist/skills/media-use/audio/scripts/lib/host-audio.mjs +28 -0
  154. package/dist/skills/media-use/audio/scripts/lib/host-audio.test.mjs +106 -0
  155. package/dist/skills/media-use/references/setup-providers.md +3 -2
  156. package/dist/skills/media-use/scripts/lib/heygen-cli.mjs +21 -1
  157. package/dist/skills/media-use/scripts/lib/heygen-cli.test.mjs +14 -0
  158. package/dist/skills/media-use/scripts/resolve.mjs +11 -6
  159. package/dist/{skills-BVONI6TC.js → skills-VKZAX5AS.js} +15 -30
  160. package/dist/{skillsUpdateCheck-KKDPTFM7.js → skillsUpdateCheck-PAY2OPDE.js} +3 -3
  161. package/dist/{snapshot-PWZFJEDR.js → snapshot-SD5R3NWX.js} +41 -32
  162. package/dist/{src-YO7MAWGD.js → src-7SSERHNP.js} +19 -11
  163. package/dist/{src-HH4C5GZV.js → src-RXTXL3VL.js} +16 -9
  164. package/dist/{staticProjectServer-PR5INXSA.js → staticProjectServer-XELJXX4J.js} +24 -16
  165. package/dist/{status-AK67DTED.js → status-JA6SKQVH.js} +7 -24
  166. package/dist/studio/assets/{hyperframes-player-B30apksz.js → hyperframes-player-BLuyxnK7.js} +1 -1
  167. package/dist/studio/assets/{index-DXVvWfQG.js → index-CWfuDCoA.js} +1 -1
  168. package/dist/studio/assets/{index-DIJuIBwI.js → index-Dr3Bo9uH.js} +1 -1
  169. package/dist/studio/assets/{index-BdjA0CLD.js → index-VAHDM_zL.js} +210 -210
  170. package/dist/studio/{chunk-4S3AYCOG.js → chunk-H2DUOXTF.js} +3 -2
  171. package/dist/studio/{chunk-TDWGXBUT.js → chunk-TFLU2MGI.js} +1 -6
  172. package/dist/studio/chunk-TFLU2MGI.js.map +1 -0
  173. package/dist/studio/{chunk-7UQWVN52.js → chunk-UYWON5AX.js} +2 -2
  174. package/dist/studio/{domEditingLayers-IEVLO54Z.js → domEditingLayers-KBTPQKGA.js} +3 -3
  175. package/dist/studio/index.d.ts +20 -3
  176. package/dist/studio/index.html +1 -1
  177. package/dist/studio/index.js +7327 -6265
  178. package/dist/studio/index.js.map +1 -1
  179. package/dist/studio/player.js +2 -2
  180. package/dist/{studio-api-NFJMFAB7.js → studio-api-4FNUZPJ4.js} +40 -28
  181. package/dist/{studioServer-TQZVCIEL.js → studioServer-GHLL3F2M.js} +99 -68
  182. package/dist/{system-ZWIBWWE6.js → system-OQLOGGPJ.js} +2 -19
  183. package/dist/{telemetry-63L2ORO3.js → telemetry-7AO77PMH.js} +8 -23
  184. package/dist/{timeline-QKZQL5DJ.js → timeline-6LTHSRXM.js} +32 -22
  185. package/dist/{tokens-ELK62U4A.js → tokens-K6B46KNL.js} +3 -3
  186. package/dist/{transcribe-OSK7HEOJ.js → transcribe-CLLISRLZ.js} +18 -9
  187. package/dist/{transcribe-VKSXTM7K.js → transcribe-K2OU6FZF.js} +37 -78
  188. package/dist/{updateCheck-PM4FEI7P.js → updateCheck-X6UQBS6I.js} +2 -2
  189. package/dist/{upgrade-G635QCNO.js → upgrade-BZFKEADI.js} +5 -5
  190. package/dist/{urlDownloader-MVYQTP73.js → urlDownloader-VAVUXYEQ.js} +14 -7
  191. package/dist/{validate-AZTMI3HR.js → validate-VO5KEXWN.js} +26 -19
  192. package/dist/{video-H56FK33V.js → video-JV6Y4UJR.js} +18 -11
  193. package/package.json +1 -1
  194. package/dist/chunk-UINDCCO7.js +0 -3742
  195. package/dist/studio/chunk-TDWGXBUT.js.map +0 -1
  196. package/dist/{chunk-I465DBM6.js → chunk-246MOR5U.js} +3 -3
  197. package/dist/{deploy-MX76RZ36.js → deploy-5G4Z6LPA.js} +1 -1
  198. package/dist/{destroy-H2TZBYHH.js → destroy-GFQLTIY3.js} +1 -1
  199. package/dist/{docs-QAPJEGLS.js → docs-MPOM3PHH.js} +3 -3
  200. package/dist/{policies-FSDZVS2E.js → policies-4FEXMXPK.js} +3 -3
  201. package/dist/{progress-FBIEEB7Y.js → progress-5AM2MZ7V.js} +3 -3
  202. package/dist/{sites-TNVKZS73.js → sites-HZMADOA3.js} +1 -1
  203. package/dist/studio/{chunk-4S3AYCOG.js.map → chunk-H2DUOXTF.js.map} +0 -0
  204. package/dist/studio/{chunk-7UQWVN52.js.map → chunk-UYWON5AX.js.map} +0 -0
  205. package/dist/studio/{domEditingLayers-IEVLO54Z.js.map → domEditingLayers-KBTPQKGA.js.map} +0 -0
  206. package/dist/{telemetry-2YC4SGQU.js → telemetry-W5AKPI4R.js} +3 -3
  207. package/dist/{tts-FU35O6YB.js → tts-TOHSPWEG.js} +4 -4
@@ -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-HH4C5GZV.js");
10
+ return await import("./src-RXTXL3VL.js");
11
11
  }
12
12
 
13
13
  export {
@@ -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-PHRWQQOJ.js";
9
+ } from "./chunk-PE2I3AFA.js";
10
10
  import {
11
11
  requestCliExit
12
12
  } from "./chunk-PBN6GBJE.js";
@@ -9,7 +9,7 @@ import {
9
9
  buildAuthHeaders,
10
10
  refreshTokens,
11
11
  resolveCredential
12
- } from "./chunk-I465DBM6.js";
12
+ } from "./chunk-246MOR5U.js";
13
13
 
14
14
  // src/cloud/auth.ts
15
15
  async function resolveCloudAuthHeaders() {
@@ -7,12 +7,9 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  diag
9
9
  } from "./chunk-VWG7OQKU.js";
10
- import {
11
- c
12
- } from "./chunk-ZTZA4UWZ.js";
13
10
  import {
14
11
  getSystemMeta
15
- } from "./chunk-MIOBYUXT.js";
12
+ } from "./chunk-GQJZORQP.js";
16
13
  import {
17
14
  getInvocationId
18
15
  } from "./chunk-54HJ63Q2.js";
@@ -23,7 +20,7 @@ import {
23
20
  evaluateCanary,
24
21
  findCanary,
25
22
  parseCanaryOverride
26
- } from "./chunk-RLNB3JCY.js";
23
+ } from "./chunk-FXMKHHPO.js";
27
24
  import {
28
25
  hostAnswers
29
26
  } from "./chunk-K4WIOZFP.js";
@@ -37,7 +34,10 @@ import {
37
34
  } from "./chunk-XUXGIA7H.js";
38
35
  import {
39
36
  VERSION
40
- } from "./chunk-P75OFLZN.js";
37
+ } from "./chunk-MUINFURL.js";
38
+ import {
39
+ c
40
+ } from "./chunk-ZTZA4UWZ.js";
41
41
 
42
42
  // src/telemetry/transport.ts
43
43
  import { spawn } from "child_process";
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-ISN5GRYI.js";
18
18
  import {
19
19
  VERSION
20
- } from "./chunk-P75OFLZN.js";
20
+ } from "./chunk-MUINFURL.js";
21
21
 
22
22
  // src/utils/updateCheck.ts
23
23
  import { existsSync, readFileSync } from "fs";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  VERSION
9
- } from "./chunk-P75OFLZN.js";
9
+ } from "./chunk-MUINFURL.js";
10
10
 
11
11
  // src/registry/compatibility.ts
12
12
  import { compareVersions } from "compare-versions";
@@ -6,13 +6,13 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  refreshIfNeeded
9
- } from "./chunk-SHB5VDMH.js";
9
+ } from "./chunk-BRITLL56.js";
10
10
  import {
11
11
  buildAuthHeaders,
12
12
  isAuthError,
13
13
  isTokenExpired,
14
14
  tryResolveCredential
15
- } from "./chunk-I465DBM6.js";
15
+ } from "./chunk-246MOR5U.js";
16
16
  import {
17
17
  CSS_URL_RE,
18
18
  isNonRelativeUrl,
@@ -4,9 +4,12 @@ import { dirname as __hf_dirname } from "node:path";
4
4
  var require = __hf_createRequire(import.meta.url);
5
5
  var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ emitWords
9
+ } from "./chunk-6IHWCZ3W.js";
7
10
  import {
8
11
  stoppedByCancelSignal
9
- } from "./chunk-DJMXTKKK.js";
12
+ } from "./chunk-LQG6GPVK.js";
10
13
  import {
11
14
  DEFAULT_MODEL,
12
15
  ensureModel,
@@ -18,25 +21,18 @@ import {
18
21
  findFFprobe,
19
22
  getFFmpegInstallHint
20
23
  } from "./chunk-TVCRUG2S.js";
24
+ import {
25
+ findWavChunk
26
+ } from "./chunk-UOFAE5RF.js";
21
27
 
22
28
  // src/whisper/transcribe.ts
23
- import { execFileSync } from "child_process";
29
+ import { execFile, execFileSync } from "child_process";
30
+ import { once } from "events";
31
+ import { createInterface } from "readline";
24
32
  import { existsSync, readFileSync, mkdirSync, rmSync, statSync, unlinkSync } from "fs";
25
33
  import { join, extname } from "path";
26
34
  import { tmpdir } from "os";
27
35
  import { randomUUID } from "crypto";
28
- function findWavDataChunk(buf) {
29
- if (buf.length < 12) return null;
30
- let pos = 12;
31
- while (pos + 8 < buf.length) {
32
- const id = buf.toString("ascii", pos, pos + 4);
33
- const size = buf.readUInt32LE(pos + 4);
34
- if (id === "data") return { offset: pos + 8, size: Math.min(size, buf.length - pos - 8) };
35
- pos += 8 + size;
36
- if (size % 2 !== 0) pos++;
37
- }
38
- return null;
39
- }
40
36
  var WHISPER_TIMEOUT_FLOOR_MS = 3e5;
41
37
  var WHISPER_TIMEOUT_PER_AUDIO_SECOND_MS = 1e4;
42
38
  var WHISPER_TIMEOUT_CAP_MS = 432e5;
@@ -129,7 +125,7 @@ function detectSpeechOnset(wavPath) {
129
125
  const MIN_INTRO_SECONDS = 3;
130
126
  try {
131
127
  const buf = readFileSync(wavPath);
132
- const dataChunk = findWavDataChunk(buf);
128
+ const dataChunk = findWavChunk(buf, "data");
133
129
  if (!dataChunk) return null;
134
130
  const pcm = new Int16Array(buf.buffer, buf.byteOffset + dataChunk.offset, dataChunk.size / 2);
135
131
  const totalWindows = Math.floor(pcm.length / WINDOW_SAMPLES);
@@ -293,7 +289,14 @@ async function transcribe(inputPath, outputDir, options) {
293
289
  const automaticLanguage = options?.language === void 0 && !model.endsWith(".en");
294
290
  const language = options?.language ?? (automaticLanguage ? "auto" : "en");
295
291
  options?.onProgress?.("Transcribing...");
296
- options?.onEvent?.({ type: "progress", phase: "transcription", model, status: "started" });
292
+ const wavSeconds = getPreparedWavDurationSeconds(wavPath);
293
+ options?.onEvent?.({
294
+ type: "progress",
295
+ phase: "transcription",
296
+ model,
297
+ status: "started",
298
+ durationSeconds: wavSeconds
299
+ });
297
300
  const outputBase = join(outputDir, "transcript");
298
301
  mkdirSync(outputDir, { recursive: true });
299
302
  const whisperArgs = [
@@ -307,15 +310,31 @@ async function transcribe(inputPath, outputDir, options) {
307
310
  "--suppress-nst"
308
311
  ];
309
312
  whisperArgs.push("--language", language);
313
+ const onEvent = options?.onEvent;
314
+ if (onEvent) whisperArgs.push("--print-progress");
310
315
  whisperArgs.push(wavPath);
311
- const whisperTimeoutMs = resolveWhisperTimeoutMs(getPreparedWavDurationSeconds(wavPath), {
316
+ const whisperTimeoutMs = resolveWhisperTimeoutMs(wavSeconds, {
312
317
  model,
313
318
  overrideMs: options?.timeoutMs
314
319
  });
320
+ let through = 0;
321
+ const heard = (words, at) => {
322
+ if (!onEvent || words.length === 0 && at <= through) return;
323
+ through = Math.max(through, at);
324
+ emitWords(onEvent, model, words, through);
325
+ };
315
326
  try {
316
- execFileSync(whisper.executablePath, whisperArgs, {
317
- stdio: "ignore",
318
- timeout: whisperTimeoutMs
327
+ await runWhisper(whisper.executablePath, whisperArgs, {
328
+ timeoutMs: whisperTimeoutMs,
329
+ signal: options?.startCancellation?.(),
330
+ onStdout: onEvent && ((line) => {
331
+ const segment = segmentWords(line);
332
+ if (segment) heard(segment.words, segment.end);
333
+ }),
334
+ onStderr: onEvent && wavSeconds ? (line) => {
335
+ const percent = /progress =\s*(\d+)%/.exec(line)?.[1];
336
+ if (percent) heard([], Number(percent) / 100 * wavSeconds);
337
+ } : void 0
319
338
  });
320
339
  } catch (err) {
321
340
  throw wrapWhisperTimeoutError(err, {
@@ -359,6 +378,45 @@ async function transcribe(inputPath, outputDir, options) {
359
378
  speechOnsetSeconds
360
379
  };
361
380
  }
381
+ var SEGMENT_LINE = /^\[(\d+):(\d+):([\d.]+) --> (\d+):(\d+):([\d.]+)\]\s*(.*)$/;
382
+ var toSeconds = (h, m, s) => Number(h) * 3600 + Number(m) * 60 + Number(s);
383
+ var toMs = (seconds) => Math.round(seconds * 1e3) / 1e3;
384
+ function segmentWords(line) {
385
+ const m = SEGMENT_LINE.exec(line);
386
+ if (!m) return null;
387
+ const start = toSeconds(m[1], m[2], m[3]);
388
+ const end = toSeconds(m[4], m[5], m[6]);
389
+ const texts = m[7].split(/\s+/).filter((t) => t && !t.startsWith("[_") && !t.startsWith("[BLANK"));
390
+ const letters = texts.reduce((n, t) => n + t.length, 0);
391
+ let at = start;
392
+ const words = texts.map((text) => {
393
+ const from = at;
394
+ at += (end - start) * text.length / letters;
395
+ return { text, start: toMs(from), end: toMs(at) };
396
+ });
397
+ return { words, end };
398
+ }
399
+ async function runWhisper(executable, args, options) {
400
+ let stdout = null;
401
+ let stderr = null;
402
+ const exited = new Promise((resolve, reject) => {
403
+ const child = execFile(
404
+ executable,
405
+ args,
406
+ { timeout: options.timeoutMs, signal: options.signal, maxBuffer: 256 * 1024 * 1024 },
407
+ (err, _out, errText) => {
408
+ if (!err) return resolve();
409
+ const timedOut = err.killed && err.signal === "SIGTERM" && !options.signal?.aborted;
410
+ err.message = err.message.split("\n")[0];
411
+ reject(Object.assign(err, { stderr: errText }, timedOut ? { code: "ETIMEDOUT" } : {}));
412
+ }
413
+ );
414
+ stdout = child.stdout;
415
+ stderr = child.stderr;
416
+ });
417
+ const read = (stream, onLine) => stream && onLine ? once(createInterface({ input: stream }).on("line", onLine), "close") : null;
418
+ await Promise.all([exited, read(stdout, options.onStdout), read(stderr, options.onStderr)]);
419
+ }
362
420
  function isWhisperTimeoutError(err) {
363
421
  return err instanceof Error && err.code === "ETIMEDOUT";
364
422
  }
@@ -0,0 +1,123 @@
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
+ // ../core/dist/canary.js
9
+ function fnv1a32(input) {
10
+ let hash = 2166136261;
11
+ for (let i = 0; i < input.length; i++) {
12
+ hash ^= input.charCodeAt(i);
13
+ hash = hash + ((hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24)) >>> 0;
14
+ }
15
+ return hash >>> 0;
16
+ }
17
+ function canaryBucket(feature, unitId) {
18
+ return fnv1a32(`${feature}:${unitId}`) % 100;
19
+ }
20
+ function evaluateCanary(input) {
21
+ if (input.override === true)
22
+ return { enabled: true, reason: "forced_on" };
23
+ if (input.override === false)
24
+ return { enabled: false, reason: "forced_off" };
25
+ const pct = Math.max(0, Math.min(100, Math.trunc(input.percentage)));
26
+ if (pct <= 0)
27
+ return { enabled: false, reason: "out_of_cohort" };
28
+ if (pct >= 100)
29
+ return { enabled: true, reason: "in_cohort" };
30
+ if (input.exclude)
31
+ return { enabled: false, reason: "excluded" };
32
+ const unitId = input.unitId?.trim();
33
+ if (!unitId)
34
+ return { enabled: false, reason: "no_unit_id" };
35
+ const bucket = canaryBucket(input.feature, unitId);
36
+ return bucket < pct ? { enabled: true, reason: "in_cohort", bucket } : { enabled: false, reason: "out_of_cohort", bucket };
37
+ }
38
+ function parseCanaryOverride(raw) {
39
+ const v = raw?.trim().toLowerCase();
40
+ if (v === void 0 || v === "")
41
+ return void 0;
42
+ if (v === "1" || v === "true" || v === "on" || v === "yes")
43
+ return true;
44
+ if (v === "0" || v === "false" || v === "off" || v === "no")
45
+ return false;
46
+ return void 0;
47
+ }
48
+ var CANARY_FEATURE_PREFIX = "$feature/canary-";
49
+ function canaryFeatureKey(name) {
50
+ return `${CANARY_FEATURE_PREFIX}${name}`;
51
+ }
52
+ function canaryReasonKey(name) {
53
+ return `canary_reason_${name.replace(/[^A-Za-z0-9]+/g, "_")}`;
54
+ }
55
+ function canaryFeatureProperties(entries) {
56
+ const props = {};
57
+ for (const entry of entries) {
58
+ props[canaryFeatureKey(entry.name)] = entry.enabled ? "true" : "false";
59
+ if (entry.reason !== void 0)
60
+ props[canaryReasonKey(entry.name)] = entry.reason;
61
+ }
62
+ return props;
63
+ }
64
+
65
+ // ../core/dist/canaryRegistry.js
66
+ var CANARIES = [
67
+ // ── Calibration ──────────────────────────────────────────────────────────
68
+ // Two INERT canaries that gate nothing. They exist to validate the rollout
69
+ // mechanism against real traffic before anything real depends on it, and
70
+ // they answer questions the synthetic tests cannot:
71
+ //
72
+ // 1. Does a requested percentage land on target in the wild? The unit
73
+ // tests use generated UUIDs and weight every install equally; real
74
+ // render volume is heavily skewed toward a few heavy installs, so the
75
+ // render-weighted share could differ from the install-weighted one.
76
+ // 2. How fast does CUMULATIVE exposure drift above the target? Install
77
+ // ids churn (measured: 24.7x more distinct ids over 30 days than in
78
+ // any single day), so the set of installs enrolled AT SOME POINT grows
79
+ // even though the instantaneous share stays flat. That drift is the
80
+ // real limit on a canary's blast-radius guarantee.
81
+ // 3. Are two canaries actually independent on real ids, not just on
82
+ // generated ones? Overlap should be ~p1*p2, not ~min(p1,p2).
83
+ //
84
+ // Two different percentages so the answer is a line, not a point.
85
+ // Delete both once the calibration window is read.
86
+ {
87
+ name: "calibration-10",
88
+ percentage: 10,
89
+ description: "Inert. Validates rollout accuracy and cumulative-exposure drift at 10%.",
90
+ owner: "vance",
91
+ sunsetAfter: "2026-09-15"
92
+ },
93
+ {
94
+ name: "calibration-50",
95
+ percentage: 50,
96
+ description: "Inert. Second calibration point, and an independence check against calibration-10.",
97
+ owner: "vance",
98
+ sunsetAfter: "2026-09-15"
99
+ }
100
+ ];
101
+ function findCanary(name) {
102
+ return CANARIES.find((c) => c.name === name);
103
+ }
104
+ function canaryEnvVar(name) {
105
+ return `HF_CANARY_${name.toUpperCase().replace(/[^A-Z0-9]+/g, "_")}`;
106
+ }
107
+ function overdueCanaries(now = /* @__PURE__ */ new Date()) {
108
+ return CANARIES.filter((c) => {
109
+ const sunsetEnd = Date.parse(`${c.sunsetAfter}T23:59:59.999Z`);
110
+ return Number.isFinite(sunsetEnd) && now.getTime() > sunsetEnd;
111
+ }).map((c) => c.name);
112
+ }
113
+
114
+ export {
115
+ canaryBucket,
116
+ evaluateCanary,
117
+ parseCanaryOverride,
118
+ canaryFeatureProperties,
119
+ CANARIES,
120
+ findCanary,
121
+ canaryEnvVar,
122
+ overdueCanaries
123
+ };
@@ -0,0 +1,283 @@
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
+ import {
8
+ STUDIO_MANUAL_EDITS_PATH
9
+ } from "./chunk-KC5XXX3X.js";
10
+ import {
11
+ realpath,
12
+ resolveWithinProject
13
+ } from "./chunk-OFQWTKPW.js";
14
+
15
+ // ../studio-server/dist/chunk-4ETS2LXI.js
16
+ var STUDIO_MOTION_PATH = ".hyperframes/studio-motion.json";
17
+ function hasStudioMotionEntries(manifestContent) {
18
+ try {
19
+ const parsed = JSON.parse(manifestContent);
20
+ return Array.isArray(parsed.motions) && parsed.motions.length > 0;
21
+ } catch {
22
+ return false;
23
+ }
24
+ }
25
+ function createStudioMotionRenderBodyScript(manifestContent, options = {}) {
26
+ if (!manifestContent.trim() || !hasStudioMotionEntries(manifestContent)) return null;
27
+ return `(${studioMotionRenderRuntime.toString()})(${JSON.stringify(manifestContent)}, ${JSON.stringify(options.activeCompositionPath ?? null)});`;
28
+ }
29
+ function studioMotionRenderRuntime(manifestContent, activeCompositionPath) {
30
+ const STUDIO_MOTION_TIMELINE_ID = "studio-motion";
31
+ const STUDIO_MOTION_ATTR = "data-hf-studio-motion";
32
+ const ORIGINAL_TRANSFORM_ATTR = "data-hf-studio-motion-original-transform";
33
+ const ORIGINAL_OPACITY_ATTR = "data-hf-studio-motion-original-opacity";
34
+ const ORIGINAL_VISIBILITY_ATTR = "data-hf-studio-motion-original-visibility";
35
+ const objectRecord = (value) => value && typeof value === "object" ? value : null;
36
+ const finiteNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : null;
37
+ const runtimeWindow = window;
38
+ const parseMotionValues = (value) => {
39
+ const record = objectRecord(value);
40
+ if (!record) return null;
41
+ const parsed = {};
42
+ for (const key of ["x", "y", "scale", "rotation", "opacity", "autoAlpha"]) {
43
+ const next = finiteNumber(record[key]);
44
+ if (next != null) parsed[key] = next;
45
+ }
46
+ return Object.keys(parsed).length > 0 ? parsed : null;
47
+ };
48
+ const parseCustomEase = (value) => {
49
+ const record = objectRecord(value);
50
+ if (!record) return null;
51
+ const id = typeof record.id === "string" ? record.id.trim() : "";
52
+ const data = typeof record.data === "string" ? record.data.trim() : "";
53
+ if (!id || !data) return null;
54
+ return { id, data };
55
+ };
56
+ const parsedManifest = (() => {
57
+ try {
58
+ return objectRecord(JSON.parse(manifestContent));
59
+ } catch {
60
+ return null;
61
+ }
62
+ })();
63
+ const manifestMotions = Array.isArray(parsedManifest?.motions) ? parsedManifest.motions : [];
64
+ const sourceFileForElement = (element) => {
65
+ let current = element;
66
+ while (current) {
67
+ const sourceFile = current.getAttribute("data-composition-file") ?? current.getAttribute("data-composition-src");
68
+ if (sourceFile) return sourceFile;
69
+ current = current.parentElement;
70
+ }
71
+ return activeCompositionPath ?? "index.html";
72
+ };
73
+ const elementMatchesSourceFile = (element, sourceFile) => sourceFileForElement(element) === sourceFile;
74
+ const isHTMLElement = (element) => element instanceof HTMLElement;
75
+ const querySelectorCandidates = (selector) => {
76
+ const className = selector.match(/^\.([A-Za-z0-9_-]+)$/)?.[1];
77
+ if (className) {
78
+ return Array.from(document.getElementsByTagName("*")).filter(
79
+ (element) => isHTMLElement(element) && element.classList.contains(className)
80
+ );
81
+ }
82
+ if (/^[A-Za-z][A-Za-z0-9-]*$/.test(selector)) {
83
+ return Array.from(document.getElementsByTagName(selector)).filter(isHTMLElement);
84
+ }
85
+ return Array.from(document.querySelectorAll(selector)).filter(isHTMLElement);
86
+ };
87
+ const resolveTarget = (targetRecord) => {
88
+ const sourceFile = typeof targetRecord.sourceFile === "string" ? targetRecord.sourceFile : "";
89
+ if (!sourceFile) return null;
90
+ const id = typeof targetRecord.id === "string" ? targetRecord.id : "";
91
+ if (id) {
92
+ const byId = document.getElementById(id);
93
+ if (isHTMLElement(byId) && elementMatchesSourceFile(byId, sourceFile)) return byId;
94
+ }
95
+ const selector = typeof targetRecord.selector === "string" ? targetRecord.selector : "";
96
+ if (!selector) return null;
97
+ try {
98
+ const selectorIndex = Math.max(0, Math.floor(finiteNumber(targetRecord.selectorIndex) ?? 0));
99
+ return querySelectorCandidates(selector).filter(
100
+ (element) => elementMatchesSourceFile(element, sourceFile)
101
+ )[selectorIndex] ?? null;
102
+ } catch {
103
+ return null;
104
+ }
105
+ };
106
+ const restoreElement = (element) => {
107
+ runtimeWindow.gsap?.set?.(element, { clearProps: "transform,opacity,visibility" });
108
+ element.style.transform = element.getAttribute(ORIGINAL_TRANSFORM_ATTR) ?? "";
109
+ element.style.opacity = element.getAttribute(ORIGINAL_OPACITY_ATTR) ?? "";
110
+ element.style.visibility = element.getAttribute(ORIGINAL_VISIBILITY_ATTR) ?? "";
111
+ element.removeAttribute(STUDIO_MOTION_ATTR);
112
+ element.removeAttribute(ORIGINAL_TRANSFORM_ATTR);
113
+ element.removeAttribute(ORIGINAL_OPACITY_ATTR);
114
+ element.removeAttribute(ORIGINAL_VISIBILITY_ATTR);
115
+ };
116
+ const restoreStudioMotionElements = () => {
117
+ for (const element of Array.from(document.querySelectorAll(`[${STUDIO_MOTION_ATTR}]`))) {
118
+ if (isHTMLElement(element)) restoreElement(element);
119
+ }
120
+ };
121
+ const readCurrentTime = () => {
122
+ try {
123
+ const playerTime = runtimeWindow.__player?.getTime?.();
124
+ if (typeof playerTime === "number" && Number.isFinite(playerTime)) {
125
+ return Math.max(0, playerTime);
126
+ }
127
+ } catch {
128
+ }
129
+ try {
130
+ const timelineTime = runtimeWindow.__timeline?.time?.();
131
+ if (typeof timelineTime === "number" && Number.isFinite(timelineTime)) {
132
+ return Math.max(0, timelineTime);
133
+ }
134
+ } catch {
135
+ }
136
+ return 0;
137
+ };
138
+ const resolveEase = (motion) => {
139
+ const fallback = typeof motion.ease === "string" && motion.ease.trim() ? motion.ease.trim() : "none";
140
+ const customEase = parseCustomEase(motion.customEase);
141
+ const customEasePlugin = runtimeWindow.CustomEase;
142
+ if (!customEase || typeof customEasePlugin?.create !== "function") return fallback;
143
+ try {
144
+ runtimeWindow.gsap?.registerPlugin?.(customEasePlugin);
145
+ customEasePlugin.create(customEase.id, customEase.data);
146
+ return customEase.id;
147
+ } catch {
148
+ return fallback;
149
+ }
150
+ };
151
+ const applyManifest = () => {
152
+ runtimeWindow.__timelines = runtimeWindow.__timelines ?? {};
153
+ runtimeWindow.__timelines[STUDIO_MOTION_TIMELINE_ID]?.kill?.();
154
+ delete runtimeWindow.__timelines[STUDIO_MOTION_TIMELINE_ID];
155
+ restoreStudioMotionElements();
156
+ const gsap = runtimeWindow.gsap;
157
+ if (!gsap?.timeline || manifestMotions.length === 0) return 0;
158
+ const timeline = gsap.timeline({ paused: true, defaults: { overwrite: "auto" } });
159
+ let applied = 0;
160
+ for (const motionValue of manifestMotions) {
161
+ const motion = objectRecord(motionValue);
162
+ if (!motion || motion.kind !== "gsap-motion") continue;
163
+ const targetRecord = objectRecord(motion.target);
164
+ if (!targetRecord) continue;
165
+ const target = resolveTarget(targetRecord);
166
+ if (!target || typeof timeline.fromTo !== "function") continue;
167
+ const start = finiteNumber(motion.start);
168
+ const duration = finiteNumber(motion.duration);
169
+ if (start == null || duration == null || start < 0 || duration <= 0) continue;
170
+ const from = parseMotionValues(motion.from);
171
+ const to = parseMotionValues(motion.to);
172
+ if (!from || !to) continue;
173
+ if (!target.hasAttribute(STUDIO_MOTION_ATTR)) {
174
+ target.setAttribute(ORIGINAL_TRANSFORM_ATTR, target.style.transform);
175
+ target.setAttribute(ORIGINAL_OPACITY_ATTR, target.style.opacity);
176
+ target.setAttribute(ORIGINAL_VISIBILITY_ATTR, target.style.visibility);
177
+ }
178
+ target.setAttribute(STUDIO_MOTION_ATTR, "true");
179
+ timeline.fromTo(
180
+ target,
181
+ from,
182
+ { ...to, duration, ease: resolveEase(motion), overwrite: "auto", immediateRender: false },
183
+ start
184
+ );
185
+ applied += 1;
186
+ }
187
+ if (applied === 0) {
188
+ timeline.kill?.();
189
+ return 0;
190
+ }
191
+ runtimeWindow.__timelines[STUDIO_MOTION_TIMELINE_ID] = timeline;
192
+ timeline.pause?.();
193
+ const currentTime = readCurrentTime();
194
+ if (typeof timeline.totalTime === "function") timeline.totalTime(currentTime, false);
195
+ else timeline.time?.(currentTime);
196
+ return applied;
197
+ };
198
+ runtimeWindow.__hfStudioMotionApply = applyManifest;
199
+ applyManifest();
200
+ }
201
+
202
+ // ../studio-server/dist/chunk-DTKK7TKL.js
203
+ import { basename, dirname, isAbsolute, join, relative, sep } from "path";
204
+ import { readdirSync } from "fs";
205
+ function resolveWithinProject2(base, relativePath) {
206
+ const resolved = resolveWithinProject(base, relativePath);
207
+ return resolved && !isPrivateProjectFile(base, resolved) ? resolved : null;
208
+ }
209
+ function realFilePath(filePath) {
210
+ try {
211
+ return realpath(filePath);
212
+ } catch {
213
+ const dir = dirname(filePath);
214
+ return dir === filePath ? filePath : join(realFilePath(dir), basename(filePath));
215
+ }
216
+ }
217
+ var STUDIO_FILES = /* @__PURE__ */ new Set([STUDIO_MOTION_PATH, STUDIO_MANUAL_EDITS_PATH]);
218
+ var STUDIO_FOLDERS = [".hyperframes/prepared-assets", ".hyperframes/requests"];
219
+ function isPrivateProjectPath(relPath) {
220
+ const path = relPath.toLowerCase();
221
+ return (path === ".hyperframes" || path.startsWith(".hyperframes/")) && !STUDIO_FILES.has(path) && !STUDIO_FOLDERS.some((folder) => path === folder || path.startsWith(`${folder}/`));
222
+ }
223
+ function isPrivateProjectFile(projectDir, filePath) {
224
+ const rel = (from, to) => relative(from, to).split(sep).join("/");
225
+ return [rel(projectDir, filePath), rel(realFilePath(projectDir), realFilePath(filePath))].some(
226
+ isPrivateProjectPath
227
+ );
228
+ }
229
+ function pinWithinProject(base, relativePath) {
230
+ const checked = resolveWithinProject2(base, relativePath);
231
+ if (!checked) return null;
232
+ const inside = relative(realFilePath(base), realFilePath(checked));
233
+ const escapes = inside === ".." || inside.startsWith(`..${sep}`) || isAbsolute(inside);
234
+ return escapes ? null : join(base, inside);
235
+ }
236
+ var IGNORE_DIRS = /* @__PURE__ */ new Set([
237
+ ".thumbnails",
238
+ ".transcode-cache",
239
+ ".waveform-cache",
240
+ "node_modules",
241
+ ".git"
242
+ ]);
243
+ function shouldIgnoreDir(rel) {
244
+ return rel === ".hyperframes/backup";
245
+ }
246
+ function isInHiddenOrVendorDir(relPath) {
247
+ const segments = relPath.split("/");
248
+ return segments.slice(0, -1).some((seg) => seg.startsWith(".") || seg === "node_modules");
249
+ }
250
+ var UNREADABLE_DIR_CODES = /* @__PURE__ */ new Set(["EACCES", "EPERM", "ENOENT", "ENOTDIR"]);
251
+ function walkDir(dir, prefix = "") {
252
+ let entries;
253
+ try {
254
+ entries = readdirSync(dir, { withFileTypes: true });
255
+ } catch (err) {
256
+ const code = err.code;
257
+ if (!prefix || !code || !UNREADABLE_DIR_CODES.has(code)) throw err;
258
+ return [];
259
+ }
260
+ const files = [];
261
+ for (const entry of entries) {
262
+ const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
263
+ if (IGNORE_DIRS.has(entry.name) || shouldIgnoreDir(rel)) continue;
264
+ if (entry.isDirectory()) {
265
+ files.push(...walkDir(join(dir, entry.name), rel));
266
+ } else {
267
+ files.push(rel);
268
+ }
269
+ }
270
+ return files;
271
+ }
272
+
273
+ export {
274
+ STUDIO_MOTION_PATH,
275
+ createStudioMotionRenderBodyScript,
276
+ resolveWithinProject2 as resolveWithinProject,
277
+ realFilePath,
278
+ isPrivateProjectPath,
279
+ isPrivateProjectFile,
280
+ pinWithinProject,
281
+ isInHiddenOrVendorDir,
282
+ walkDir
283
+ };
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-AMKC3AXA.js";
10
10
  import {
11
11
  getSystemTotalMb
12
- } from "./chunk-7Y5SMPRV.js";
12
+ } from "./chunk-USDEMXXL.js";
13
13
 
14
14
  // src/telemetry/system.ts
15
15
  import { cpus, freemem, platform as platform2, release as release2 } from "os";
@@ -8,7 +8,7 @@ import {
8
8
  forceRefreshCredentials,
9
9
  resolveCloudAuthHeaders,
10
10
  resolveCloudBaseUrl
11
- } from "./chunk-SHB5VDMH.js";
11
+ } from "./chunk-BRITLL56.js";
12
12
  import {
13
13
  errorBox
14
14
  } from "./chunk-IHFUKJOR.js";