hyperframes 0.8.191 → 0.8.193

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 (213) hide show
  1. package/dist/{add-S2ZQYG52.js → add-JC6DKZKC.js} +17 -17
  2. package/dist/{animatedGifPrep-3JA2CQ3U.js → animatedGifPrep-S6KXJGEL.js} +11 -10
  3. package/dist/api.js +24 -23
  4. package/dist/{appHistory-TH3TL6N6.js → appHistory-QVCSAOI4.js} +1 -1
  5. package/dist/{asset-2CNTAPOC.js → asset-XITFIFE6.js} +2 -2
  6. package/dist/{assetCataloger-5HXLXL7C.js → assetCataloger-K5FNKG35.js} +13 -12
  7. package/dist/{audio-DZTSYHXS.js → audio-364UHTY4.js} +22 -21
  8. package/dist/{auth-GX3M6TJ4.js → auth-5JEESRE6.js} +4 -4
  9. package/dist/{autoUpdate-EDIWE4Z5.js → autoUpdate-RVVYEHAA.js} +5 -5
  10. package/dist/{backgroundChecks-VPUPJ7UI.js → backgroundChecks-DCBIYWIQ.js} +5 -5
  11. package/dist/backgroundChecksWorker.js +5 -5
  12. package/dist/{batchRender-JHIIDBJR.js → batchRender-ZZ4QMBAA.js} +14 -7
  13. package/dist/{beats-PZRVTRYW.js → beats-YEL65M6G.js} +53 -15
  14. package/dist/{benchmark-22UFDW2N.js → benchmark-RBTRPA76.js} +18 -14
  15. package/dist/{browser-VRDWYIUM.js → browser-BVAYXT4R.js} +7 -7
  16. package/dist/{bundleWithLocalizedFonts-23QDKFSN.js → bundleWithLocalizedFonts-JLB2OYMT.js} +3 -3
  17. package/dist/{capture-TOCLXYMJ.js → capture-GBXTMYLZ.js} +76 -68
  18. package/dist/{capture-NFCBXHDE.js → capture-NIFX6IRS.js} +3 -3
  19. package/dist/{captureCompositionFrame-BEM6MF7F.js → captureCompositionFrame-ATNNKUL5.js} +17 -16
  20. package/dist/{catalog-NXS35KM7.js → catalog-AGIF5SM5.js} +18 -18
  21. package/dist/{catch-up-6WJBUI2C.js → catch-up-SZ3ULDTI.js} +7 -7
  22. package/dist/{check-WVEBMWN5.js → check-YLQS3TF4.js} +43 -42
  23. package/dist/{checkBrowser-RT45HJ36.js → checkBrowser-QH4FMCBO.js} +38 -37
  24. package/dist/{chunk-JOLZ3BSL.js → chunk-2LSCYS2H.js} +2 -2
  25. package/dist/{chunk-B2A56S5C.js → chunk-2MCXIY4B.js} +13 -10
  26. package/dist/{chunk-TADJOIFW.js → chunk-2NERNYCJ.js} +4 -4
  27. package/dist/{chunk-KGMHMYWI.js → chunk-2SFDWMSW.js} +2 -2
  28. package/dist/{chunk-DCAI5DBR.js → chunk-2ST4WAFY.js} +9 -1
  29. package/dist/{chunk-3NRB7YXW.js → chunk-2VXY3PEF.js} +96 -67
  30. package/dist/{chunk-IXLUTE6N.js → chunk-3422KMTD.js} +5 -1
  31. package/dist/{chunk-VYQYVYQ5.js → chunk-3W4B6G7Y.js} +83 -45
  32. package/dist/{chunk-JYSSPQDT.js → chunk-4LXZJIVY.js} +11 -11
  33. package/dist/{chunk-WHAEJX26.js → chunk-4PPWAQYV.js} +17 -12
  34. package/dist/{chunk-COWQITWP.js → chunk-4TKJWWPL.js} +1 -1
  35. package/dist/{chunk-NXMYHJAL.js → chunk-4VYPICIA.js} +29 -1
  36. package/dist/{chunk-RE3EEBWC.js → chunk-5J6TWLFG.js} +4 -4
  37. package/dist/{chunk-TFMZ4RKM.js → chunk-6DLCOQR4.js} +474 -429
  38. package/dist/{chunk-KV72BP7O.js → chunk-6LWUPIKD.js} +11 -11
  39. package/dist/{chunk-HRPWRZGF.js → chunk-6N65ZMC5.js} +1 -1
  40. package/dist/{chunk-XUXGIA7H.js → chunk-6NLPPKBO.js} +1 -2
  41. package/dist/{chunk-JJJCFKMF.js → chunk-6XUJVEY2.js} +17 -6
  42. package/dist/{chunk-GM3WIOO6.js → chunk-7HTH5PFK.js} +2 -2
  43. package/dist/{chunk-LBNEH6IQ.js → chunk-7QNIXBQD.js} +1 -1
  44. package/dist/{chunk-OV6KHXLX.js → chunk-7YKJF5JV.js} +1 -1
  45. package/dist/{chunk-COETAXRN.js → chunk-7YSFE4SZ.js} +2 -2
  46. package/dist/{chunk-3WJT2JCX.js → chunk-AR3DQYRR.js} +52 -23
  47. package/dist/{chunk-HYW6HTAK.js → chunk-BJAS2JLW.js} +2 -2
  48. package/dist/{chunk-RWYUK7LM.js → chunk-BP4EMEGH.js} +2 -2
  49. package/dist/{chunk-XGHHVYC7.js → chunk-BY6OQ6XP.js} +2 -2
  50. package/dist/{chunk-TMBUBLZB.js → chunk-C4Y3ZREE.js} +185 -46
  51. package/dist/{chunk-JQYJXUJW.js → chunk-C6KE4AFW.js} +1 -1
  52. package/dist/{chunk-TMK4Q7JA.js → chunk-CFUCHO4T.js} +20 -5
  53. package/dist/{chunk-JGTRVG32.js → chunk-CGTZOY53.js} +1 -1
  54. package/dist/chunk-CZGHFATT.js +31 -0
  55. package/dist/{chunk-NJGTNWQY.js → chunk-D625D4TV.js} +6 -6
  56. package/dist/{chunk-CYBXXSC4.js → chunk-DIKAPMMF.js} +2 -2
  57. package/dist/{chunk-CXMXJEVY.js → chunk-DSQ72G5I.js} +1 -1
  58. package/dist/{chunk-GLG5JWLI.js → chunk-DYNHVCBF.js} +2 -2
  59. package/dist/{chunk-7L37AB57.js → chunk-E3P3LJG6.js} +9 -9
  60. package/dist/{chunk-EFCKV7MY.js → chunk-E77ALFLW.js} +1 -1
  61. package/dist/{chunk-WQ3X5OH4.js → chunk-EFXMETRK.js} +2 -2
  62. package/dist/{chunk-7KVVNF7B.js → chunk-ELP5QZWL.js} +1 -1
  63. package/dist/{chunk-QH3T4WI2.js → chunk-EXAX37XR.js} +8 -2
  64. package/dist/{chunk-7A65UCMI.js → chunk-F5LLORBP.js} +2 -2
  65. package/dist/{chunk-EI7FP7F3.js → chunk-FBVUAH7N.js} +12 -2
  66. package/dist/{chunk-XWOCXIKR.js → chunk-GKHMSSGY.js} +1 -1
  67. package/dist/{chunk-DOOSC34Z.js → chunk-GR5DQKDR.js} +8 -8
  68. package/dist/{chunk-W64L7IFS.js → chunk-IW5G323T.js} +1 -1
  69. package/dist/{chunk-NAUKCKCJ.js → chunk-KU3UFQN7.js} +9 -12
  70. package/dist/{chunk-NMDUSCCE.js → chunk-L4JB7LI4.js} +478 -129
  71. package/dist/{chunk-ALEF2F5N.js → chunk-L5YLA54L.js} +2 -2
  72. package/dist/{chunk-MSM6VRQ4.js → chunk-LFUVTS6V.js} +2 -2
  73. package/dist/{chunk-7ZJEQY7Q.js → chunk-LMNZLZMJ.js} +23 -3
  74. package/dist/{chunk-AQB5M53R.js → chunk-M3KZBDPB.js} +3 -3
  75. package/dist/{chunk-BFFLKQVB.js → chunk-MFUNDJEV.js} +4 -4
  76. package/dist/{chunk-7NKJS5KM.js → chunk-OFV3WSOE.js} +1 -1
  77. package/dist/{chunk-CINKQY6M.js → chunk-OFYW4J7Y.js} +3 -3
  78. package/dist/{chunk-5C7R55BJ.js → chunk-P2I4RLJE.js} +1 -1
  79. package/dist/{chunk-RUOG4VB7.js → chunk-PKZ7RK5N.js} +5 -4
  80. package/dist/{chunk-LLFQA7XF.js → chunk-QFPBRZJD.js} +1 -1
  81. package/dist/{chunk-TRZVS6TL.js → chunk-QKX7ITER.js} +3 -3
  82. package/dist/{chunk-46HEFGXJ.js → chunk-REUL2KH2.js} +1 -1
  83. package/dist/{chunk-TFGO5YMI.js → chunk-RTLPWOO6.js} +2 -2
  84. package/dist/{chunk-DYAPHNV6.js → chunk-RWGASWT7.js} +1 -1
  85. package/dist/chunk-RXATE6FZ.js +385 -0
  86. package/dist/{chunk-U5GTDAQL.js → chunk-SOY2FPOR.js} +7 -7
  87. package/dist/{chunk-KNU5COPB.js → chunk-T2EUWCJE.js} +1 -1
  88. package/dist/{chunk-RQBB7PYT.js → chunk-TY3LDJA3.js} +5 -12
  89. package/dist/{chunk-KAC2WR7P.js → chunk-TZEKVLPV.js} +3 -3
  90. package/dist/{chunk-TJKE4EYX.js → chunk-UB7BIDBS.js} +3 -3
  91. package/dist/{chunk-WY3TQ2PT.js → chunk-UIC7B5KW.js} +2 -2
  92. package/dist/{chunk-2WNVHZHA.js → chunk-UNATIAOT.js} +13 -13
  93. package/dist/chunk-USWPZXEA.js +3897 -0
  94. package/dist/{chunk-FBDOHH3Q.js → chunk-V7ZA2BNW.js} +29 -59
  95. package/dist/{chunk-7LUJE3II.js → chunk-VLLFORE2.js} +1 -1
  96. package/dist/{chunk-T5YF32WV.js → chunk-VPC4XIVI.js} +6 -5
  97. package/dist/{chunk-7FF36MAD.js → chunk-VW63MHQU.js} +9 -6
  98. package/dist/{chunk-ZHKUIC7X.js → chunk-WFS6S65A.js} +21 -14
  99. package/dist/{chunk-UNR3P7IF.js → chunk-WIVOXGEP.js} +3 -3
  100. package/dist/{chunk-3XI7MIZB.js → chunk-X5CECNCK.js} +1 -1
  101. package/dist/{chunk-KHCTBZGJ.js → chunk-XQPA4W3M.js} +4 -4
  102. package/dist/{chunk-XMSQRDAK.js → chunk-YS4JUGNI.js} +2 -2
  103. package/dist/{chunk-SMEF3TRJ.js → chunk-ZH7J2ZUL.js} +15 -15
  104. package/dist/{chunk-WJEVUPVD.js → chunk-ZT45TCY3.js} +1 -1
  105. package/dist/{chunk-JTPHFYZI.js → chunk-ZTKFRXJB.js} +68 -7
  106. package/dist/{chunk-W3CS2KFV.js → chunk-ZZPBXRYQ.js} +2 -2
  107. package/dist/{clean-3VIU2BSK.js → clean-5HGESK5A.js} +40 -27
  108. package/dist/cli.js +70 -68
  109. package/dist/{cloud-NA3J4XW2.js → cloud-746PHS32.js} +4 -4
  110. package/dist/{cloudrun-4MHOF7UT.js → cloudrun-DO7WFLSM.js} +9 -9
  111. package/dist/commands/contrast-audit.browser.js +1 -1
  112. package/dist/{compare-ZR7XRPPT.js → compare-66YPRNG2.js} +76 -47
  113. package/dist/{compiler-MA2ELZPG.js → compiler-R4UYDWXO.js} +8 -7
  114. package/dist/{component-ZJSOPUAM.js → component-EQ3H6RFP.js} +3 -3
  115. package/dist/{compositions-WA5V2SHF.js → compositions-ZZ7P5HT2.js} +19 -17
  116. package/dist/{contactSheet-CAGMKI3E.js → contactSheet-SZBJDOMT.js} +2 -2
  117. package/dist/{delete-UC427UEA.js → delete-Z5MSLJSR.js} +7 -7
  118. package/dist/{deploy-B5UO4UIK.js → deploy-RGSAC2K5.js} +1 -1
  119. package/dist/{deterministicFonts-EGAAE7QL.js → deterministicFonts-RO2TCMLZ.js} +3 -3
  120. package/dist/{dist-XGPSPKKP.js → dist-QQ26RUDV.js} +5 -4
  121. package/dist/{dist-BPK37SAB.js → dist-RKK4YLAD.js} +5 -5
  122. package/dist/{doctor-ZERCTKEK.js → doctor-W4ZZDRTU.js} +20 -19
  123. package/dist/{events-DCOZQERS.js → events-BSSL4A4W.js} +4 -4
  124. package/dist/{events-CNIXB2QK.js → events-UACT7PX3.js} +5 -5
  125. package/dist/{feedback-YBD5ITTY.js → feedback-47ILDLQG.js} +16 -16
  126. package/dist/{ffmpeg-V4BBFDTG.js → ffmpeg-IEHSUNUT.js} +13 -12
  127. package/dist/{figma-Z45ZYVGE.js → figma-PLFIIYRU.js} +3 -3
  128. package/dist/fontLocalizeCli.js +14 -13
  129. package/dist/{get-23NXQWCD.js → get-PDWGJYNL.js} +7 -7
  130. package/dist/{gpuPolicy-H6ABHVEB.js → gpuPolicy-6UBXO6ME.js} +11 -10
  131. package/dist/{grade-compare-ZPX2G3UV.js → grade-compare-5VWLQGM7.js} +38 -37
  132. package/dist/{gsapParserAcorn-SKODXC2N.js → gsapParserAcorn-OOTY2MVN.js} +2 -2
  133. package/dist/{help-EP4CDPLO.js → help-DS3KMWYO.js} +1 -1
  134. package/dist/{history-E5OSXO74.js → history-OC326NVZ.js} +41 -17
  135. package/dist/hyperframe.manifest.json +1 -1
  136. package/dist/hyperframe.runtime.iife.js +62 -62
  137. package/dist/hyperframes-player.global.js +3 -3
  138. package/dist/hyperframes-slideshow.global.js +1 -1
  139. package/dist/{info-2HHGSW5H.js → info-AUIFV6MX.js} +56 -22
  140. package/dist/{init-ENEG6RZT.js → init-MRTWWDFW.js} +38 -45
  141. package/dist/{inspect-PVQK4E2A.js → inspect-55NOAXI2.js} +36 -35
  142. package/dist/{installer-YGGLEOSF.js → installer-YSFFGBBV.js} +8 -8
  143. package/dist/{keyframes-UWSYS2SL.js → keyframes-OO2BX2IB.js} +13 -14
  144. package/dist/{lambda-L3LPXC2M.js → lambda-CXXY6QT3.js} +11 -11
  145. package/dist/{layout-JVL4QREC.js → layout-57GJXKDK.js} +36 -35
  146. package/dist/{lint-JXQ72DDB.js → lint-J4FK3Z6G.js} +23 -16
  147. package/dist/{lintProject-F7IC7WY4.js → lintProject-52SLJPRC.js} +5 -4
  148. package/dist/{list-UFMLM3VV.js → list-VDQUJ76B.js} +7 -7
  149. package/dist/{login-CKGMWQJN.js → login-TJSEALWW.js} +7 -7
  150. package/dist/{logout-DDC4QLVK.js → logout-JYFWWUGK.js} +3 -3
  151. package/dist/{manager-U6OP3EXB.js → manager-4PLYEEWP.js} +14 -13
  152. package/dist/{manager-UHWEKPXC.js → manager-MZIJY73J.js} +3 -3
  153. package/dist/{media-treatment-MFMEWCDY.js → media-treatment-GXP4PMJH.js} +20 -19
  154. package/dist/{models-QA3TJ75Y.js → models-HQQQKEEP.js} +18 -17
  155. package/dist/{motionShot-NV2OPJHD.js → motionShot-2BT5D7DC.js} +21 -20
  156. package/dist/{normalize-3AYFSN2F.js → normalize-FASIPBUM.js} +1 -1
  157. package/dist/{normalize-audio-JWJRUKK2.js → normalize-audio-SOLFMHNP.js} +12 -8
  158. package/dist/{open-PTJNDRER.js → open-KHEUODFQ.js} +18 -18
  159. package/dist/{parakeetRunner-B5FCWWOO.js → parakeetRunner-BHU5NCAX.js} +20 -19
  160. package/dist/{pipeline-N26NA6ZG.js → pipeline-WFV5HDTD.js} +15 -14
  161. package/dist/{play-45D6X6TV.js → play-GB34CANJ.js} +27 -26
  162. package/dist/{policies-MBWGLMWB.js → policies-GHVXA5PE.js} +1 -1
  163. package/dist/{preflight-MFOHPUOI.js → preflight-REF3VSJ7.js} +15 -14
  164. package/dist/{present-IFBUDI4D.js → present-SIUTA7TD.js} +24 -23
  165. package/dist/{preview-MQRLXQOV.js → preview-T2GE7Z4A.js} +27 -26
  166. package/dist/{producer-2QG7HLAW.js → producer-23KVQZAB.js} +1 -1
  167. package/dist/{projectConfig-I4FTZXHB.js → projectConfig-DBSNBPNP.js} +10 -10
  168. package/dist/{publication-3GOFXCGU.js → publication-IXPUKYWJ.js} +5 -5
  169. package/dist/{publish-3B2TZCFH.js → publish-3BA5VHXJ.js} +18 -17
  170. package/dist/{refresh-RXTOPRBB.js → refresh-USSFPJAU.js} +3 -3
  171. package/dist/{remove-background-RK4BJDBF.js → remove-background-RMSCJVVQ.js} +16 -15
  172. package/dist/{render-SJ4HFPFU.js → render-6RNE2MLU.js} +26 -25
  173. package/dist/{render-PW3XGS7B.js → render-XGOZMMWX.js} +42 -41
  174. package/dist/{render-BV6FWFX3.js → render-Y6CTQ3YW.js} +8 -8
  175. package/dist/{render-batch-GKX54O6N.js → render-batch-VUR6N6EY.js} +9 -9
  176. package/dist/renderSetupWorker.js +9 -8
  177. package/dist/{resolver-RQJ7CNXD.js → resolver-GJCUH57W.js} +7 -7
  178. package/dist/{screenshotCapture-UBY6TT75.js → screenshotCapture-I5EDCITF.js} +6 -3
  179. package/dist/{sherpa-XZPG7QFF.js → sherpa-VVAKRCPL.js} +19 -18
  180. package/dist/skills/hyperframes/references/format.md +1 -0
  181. package/dist/skills/hyperframes/references/skill-lifecycle.md +8 -4
  182. package/dist/skills/hyperframes-cli/references/init-and-scaffold.md +1 -1
  183. package/dist/{skills-EYLB2V6F.js → skills-ZHBURVQG.js} +13 -75
  184. package/dist/{skillsUpdateCheck-TE6K5ROM.js → skillsUpdateCheck-VMDAL2O2.js} +5 -5
  185. package/dist/{slideshow-YTWATJRT.js → slideshow-SJGK4RQS.js} +1 -1
  186. package/dist/{snapshot-FE4T3SCN.js → snapshot-KEOG56SL.js} +61 -53
  187. package/dist/{src-ZOXSEJCD.js → src-BH5NICGQ.js} +24 -9
  188. package/dist/{src-SEJ7LNNB.js → src-TZLGFRRX.js} +13 -12
  189. package/dist/{staticProjectServer-LSVIRDRO.js → staticProjectServer-BKXL5CXB.js} +22 -21
  190. package/dist/{status-CM7IQTU2.js → status-H5WLKQDS.js} +3 -3
  191. package/dist/studio/assets/{hyperframes-player-Bv9hQ3v7.js → hyperframes-player-BMcUdmDb.js} +3 -3
  192. package/dist/studio/assets/{index-CBO8uz7-.css → index-CYbvOVp-.css} +1 -1
  193. package/dist/studio/assets/{index-D_QqfWhx.js → index-Ca-mgTnS.js} +122 -122
  194. package/dist/studio/assets/{index-Df14bh-L.js → index-Ci6GuloR.js} +1 -1
  195. package/dist/studio/index.html +2 -2
  196. package/dist/{studio-api-SL2Z76NU.js → studio-api-A5U6QAMC.js} +19 -14
  197. package/dist/{studioServer-BADWVIHU.js → studioServer-5EC5CP4W.js} +60 -59
  198. package/dist/{telemetry-QG5AANZ4.js → telemetry-4K6CPMNT.js} +2 -2
  199. package/dist/{telemetry-RN6VYEID.js → telemetry-BCKJXDSW.js} +5 -5
  200. package/dist/{timeline-JBTCIPLU.js → timeline-AZWAXTAY.js} +65 -43
  201. package/dist/{tokens-A7V7UHNK.js → tokens-X7NC3V7C.js} +2 -2
  202. package/dist/{transcribe-E4BOSNM4.js → transcribe-7NCY7QZ2.js} +17 -16
  203. package/dist/{transcribe-NTUCJGFI.js → transcribe-SH26H755.js} +26 -25
  204. package/dist/{tts-A2WILYGN.js → tts-5I2AJNLM.js} +1 -1
  205. package/dist/{updateCheck-M7UAYLUR.js → updateCheck-Y7FUWQM4.js} +4 -4
  206. package/dist/{upgrade-A2COSIMB.js → upgrade-ZHGEVL65.js} +4 -4
  207. package/dist/{urlDownloader-MBSQYART.js → urlDownloader-FPILIT7M.js} +10 -9
  208. package/dist/{validate-NODZYBHY.js → validate-KQOZR4F6.js} +30 -29
  209. package/dist/{video-LBCUUYK7.js → video-N2QAETFB.js} +12 -11
  210. package/dist/warmCheck.js +43 -42
  211. package/package.json +2 -1
  212. package/dist/chunk-I5JRXMCV.js +0 -6077
  213. package/dist/chunk-LM265QNK.js +0 -3896
@@ -5,8 +5,8 @@ var require = __hf_createRequire(import.meta.url);
5
5
  var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
- updateNoticesSuppressed
9
- } from "./chunk-KAC2WR7P.js";
8
+ updateCheckDisabled
9
+ } from "./chunk-TZEKVLPV.js";
10
10
  import {
11
11
  hostAnswers
12
12
  } from "./chunk-K4WIOZFP.js";
@@ -14,19 +14,12 @@ import {
14
14
  readConfig,
15
15
  readConfigFresh,
16
16
  writeConfig
17
- } from "./chunk-XUXGIA7H.js";
17
+ } from "./chunk-6NLPPKBO.js";
18
18
 
19
19
  // src/utils/skillsManifest.ts
20
20
  import { execFile } from "child_process";
21
21
  import { createHash } from "crypto";
22
- import {
23
- existsSync,
24
- readdirSync,
25
- readFileSync,
26
- renameSync,
27
- statSync,
28
- writeFileSync
29
- } from "fs";
22
+ import { existsSync, readdirSync, readFileSync, statSync } from "fs";
30
23
  import { homedir } from "os";
31
24
  import { isAbsolute, join, relative, resolve, sep } from "path";
32
25
  import { promisify } from "util";
@@ -253,7 +246,10 @@ function skillsAttributedToSource(lock, source) {
253
246
  if (!want || !lock?.skills) return [];
254
247
  return Object.entries(lock.skills).filter(([, e]) => repoSlug(e.source) === want || repoSlug(e.sourceUrl) === want).map(([name]) => name);
255
248
  }
256
- var SKILLS_CLI_LOCK_PATHS_VERIFIED_AT = "vercel-labs/skills@v1.5.13";
249
+ function isFromOtherSource(entry, source) {
250
+ const recorded = [repoSlug(entry?.source), repoSlug(entry?.sourceUrl)].filter(Boolean);
251
+ return recorded.length > 0 && !recorded.includes(repoSlug(source));
252
+ }
257
253
  function lockPathForScope(scope, opts) {
258
254
  if (scope === "project") return join(opts.cwd ?? process.cwd(), "skills-lock.json");
259
255
  const xdgStateHome = process.env.XDG_STATE_HOME;
@@ -271,34 +267,6 @@ function hyperframesSkillNames(opts) {
271
267
  const lockPath = lockPathForScope(opts.scope, { cwd: opts.cwd, home: opts.home });
272
268
  return skillsAttributedToSource(readSkillLock(lockPath), DEFAULT_REPO_SLUG);
273
269
  }
274
- var MANIFEST_COVERAGE_ROOT = "skills/";
275
- function manifestCoversSkill(entry) {
276
- const path = entry?.skillPath;
277
- return typeof path === "string" && path.startsWith(MANIFEST_COVERAGE_ROOT);
278
- }
279
- function detectRemoved(root, latest, opts) {
280
- const lock = readSkillLock(lockPathForScope(root.scope, opts));
281
- const attributed = skillsAttributedToSource(lock, latest.source);
282
- const dropped = attributed.filter((name) => manifestCoversSkill(lock?.skills?.[name]));
283
- const retired = RETIRED_SKILLS.filter(
284
- (name) => attributed.includes(name) || RETIRED_DOMAIN_SKILLS.includes(name) && existsSync(join(root.dir, name, "SKILL.md"))
285
- );
286
- const removed = [.../* @__PURE__ */ new Set([...dropped, ...retired])].filter((name) => !(name in latest.skills)).sort().map((name) => ({ name, status: "removed" }));
287
- return { removed, lockMissing: lock === null };
288
- }
289
- function pruneOrphanedLockEntries(names, scope, opts = {}) {
290
- const path = lockPathForScope(scope, opts);
291
- const lock = readSkillLock(path);
292
- if (!lock?.skills) return [];
293
- const pruned = names.filter((name) => name in lock.skills);
294
- if (pruned.length === 0) return [];
295
- for (const name of pruned) delete lock.skills[name];
296
- const mode = statSync(path).mode & 511;
297
- const tmp = `${path}.tmp`;
298
- writeFileSync(tmp, JSON.stringify(lock, null, 2), { mode });
299
- renameSync(tmp, path);
300
- return pruned;
301
- }
302
270
  function findRepoManifest(cwd = process.cwd()) {
303
271
  let dir = cwd;
304
272
  for (let i = 0; i < 16; i++) {
@@ -380,20 +348,24 @@ async function checkSkills(opts = {}) {
380
348
  const latest = await resolveLatestManifest(opts.source, opts.cwd, { canonical: opts.canonical });
381
349
  const skillNames = Object.keys(latest.skills);
382
350
  const root = locateInstall(skillNames, { dir: opts.dir, cwd: opts.cwd, home: opts.home });
383
- const installed = root ? hashInstalled(root, skillNames) : {};
384
- const diff = diffSkills(installed, latest);
385
- const removedResult = root ? detectRemoved(root, latest, { cwd: opts.cwd, home: opts.home }) : { removed: [], lockMissing: false };
386
- const { removed, lockMissing } = removedResult;
351
+ const lock = root ? readSkillLock(lockPathForScope(root.scope, opts)) : null;
352
+ const foreign = root ? skillNames.filter(
353
+ (name) => existsSync(join(root.dir, name, "SKILL.md")) && isFromOtherSource(lock?.skills?.[name], latest.source)
354
+ ) : [];
355
+ const ours = skillNames.filter((name) => !foreign.includes(name));
356
+ const installed = root ? hashInstalled(root, ours) : {};
357
+ const diff = diffSkills(installed, {
358
+ ...latest,
359
+ skills: Object.fromEntries(ours.map((name) => [name, latest.skills[name]]))
360
+ });
387
361
  return {
388
362
  location: root?.dir ?? null,
389
363
  agent: root?.agent ?? null,
390
364
  scope: root?.scope ?? null,
391
- // Removed skills also mean the install isn't reconciled with the manifest —
392
- // `skills update` now prunes them, so they count toward "update available".
393
- updateAvailable: diff.updateAvailable || removed.length > 0,
394
- summary: { ...diff.summary, removed: removed.length },
395
- skills: [...diff.skills, ...removed],
396
- lockMissing
365
+ updateAvailable: diff.updateAvailable,
366
+ summary: diff.summary,
367
+ skills: diff.skills,
368
+ foreign
397
369
  };
398
370
  }
399
371
 
@@ -404,8 +376,7 @@ function getSkillsUpdateMeta() {
404
376
  return {
405
377
  updateAvailable: config.skillsUpdateAvailable ?? false,
406
378
  outdated: config.skillsOutdatedCount ?? 0,
407
- missing: config.skillsMissingCount ?? 0,
408
- removed: config.skillsRemovedCount ?? 0
379
+ missing: config.skillsMissingCount ?? 0
409
380
  };
410
381
  }
411
382
  function cacheFresh(lastSkillsCheck, now) {
@@ -421,7 +392,6 @@ async function refreshSkillsCache() {
421
392
  config.skillsUpdateAvailable = result.updateAvailable;
422
393
  config.skillsOutdatedCount = result.summary.outdated;
423
394
  config.skillsMissingCount = result.summary.coreMissing;
424
- config.skillsRemovedCount = result.summary.removed;
425
395
  writeConfig(config);
426
396
  }
427
397
  }
@@ -432,17 +402,19 @@ function invalidateSkillsCache() {
432
402
  delete config.skillsUpdateAvailable;
433
403
  delete config.skillsOutdatedCount;
434
404
  delete config.skillsMissingCount;
435
- delete config.skillsRemovedCount;
436
405
  writeConfig(config);
437
406
  } catch {
438
407
  }
439
408
  }
409
+ function skillsNoticeOff() {
410
+ return process.env["HYPERFRAMES_SKIP_SKILLS"] === "1" || updateCheckDisabled();
411
+ }
440
412
  function skillsCheckDue() {
441
- if (process.env["HYPERFRAMES_SKIP_SKILLS"] === "1" || updateNoticesSuppressed()) return false;
413
+ if (skillsNoticeOff()) return false;
442
414
  return !cacheFresh(readConfig().lastSkillsCheck, Date.now());
443
415
  }
444
416
  function skillsNoticeText(meta) {
445
- const total = meta.outdated + meta.missing + meta.removed;
417
+ const total = meta.outdated + meta.missing;
446
418
  if (total < 1) return null;
447
419
  const noun = total === 1 ? "skill" : "skills";
448
420
  return `
@@ -452,7 +424,7 @@ function skillsNoticeText(meta) {
452
424
  `;
453
425
  }
454
426
  function printSkillsUpdateNotice() {
455
- if (process.env["HYPERFRAMES_SKIP_SKILLS"] === "1" || updateNoticesSuppressed()) return;
427
+ if (skillsNoticeOff()) return;
456
428
  const text = skillsNoticeText(getSkillsUpdateMeta());
457
429
  if (text) process.stderr.write(text);
458
430
  }
@@ -463,9 +435,7 @@ export {
463
435
  RETIRED_SKILLS,
464
436
  retiredSkillNotice,
465
437
  presentSkills,
466
- SKILLS_CLI_LOCK_PATHS_VERIFIED_AT,
467
438
  hyperframesSkillNames,
468
- pruneOrphanedLockEntries,
469
439
  checkSkills,
470
440
  refreshSkillsCache,
471
441
  invalidateSkillsCache,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-WQ6ZXHFQ.js";
10
10
  import {
11
11
  findFFmpeg
12
- } from "./chunk-GLG5JWLI.js";
12
+ } from "./chunk-DYNHVCBF.js";
13
13
  import {
14
14
  stoppableExecFile
15
15
  } from "./chunk-HU2SPFNG.js";
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  getMimeType,
9
9
  injectMediaCodecMapIntoHtml
10
- } from "./chunk-2WNVHZHA.js";
10
+ } from "./chunk-UNATIAOT.js";
11
11
  import {
12
12
  PROXY_VARIANT_CONFIG,
13
13
  ProxyCapacityError,
@@ -18,17 +18,17 @@ import {
18
18
  recordProxyRequest,
19
19
  resolveProxy,
20
20
  resolveProxyVariantRequest
21
- } from "./chunk-COETAXRN.js";
21
+ } from "./chunk-7YSFE4SZ.js";
22
22
  import {
23
23
  findStageProxyBox
24
- } from "./chunk-COWQITWP.js";
24
+ } from "./chunk-4TKJWWPL.js";
25
25
  import {
26
26
  resolveAutoProxy
27
- } from "./chunk-JJJCFKMF.js";
27
+ } from "./chunk-6XUJVEY2.js";
28
28
  import {
29
29
  PREVIEW_PROXY_BOX_PARAM,
30
30
  parsePreviewProxyBox
31
- } from "./chunk-GM3WIOO6.js";
31
+ } from "./chunk-7HTH5PFK.js";
32
32
  import {
33
33
  decodeWellFormedEscapes
34
34
  } from "./chunk-BSQ7XANM.js";
@@ -124,6 +124,7 @@ function serveFileWithRange(filePath, rangeHeader, res, contentType = getMimeTyp
124
124
  return;
125
125
  }
126
126
  const stream = createReadStream(filePath, { start, end });
127
+ res.once("close", () => stream.destroy());
127
128
  stream.on("open", () => {
128
129
  res.writeHead(status, headers);
129
130
  stream.pipe(res);
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  DISTRIBUTED_FPS,
12
12
  isDistributedFps
13
- } from "./chunk-GM3WIOO6.js";
13
+ } from "./chunk-7HTH5PFK.js";
14
14
  import {
15
15
  parseHTML
16
16
  } from "./chunk-SDYDNHEE.js";
@@ -18,6 +18,9 @@ import {
18
18
  // src/utils/compositionFps.ts
19
19
  import { readFileSync } from "fs";
20
20
  import { join } from "path";
21
+ function getHtmlAttribute(element, name) {
22
+ return Array.from(element.attributes).find((attribute) => attribute.name.toLowerCase() === name)?.value ?? null;
23
+ }
21
24
  function readCompositionFps(html) {
22
25
  let doc;
23
26
  try {
@@ -25,11 +28,11 @@ function readCompositionFps(html) {
25
28
  } catch {
26
29
  return null;
27
30
  }
28
- const explicitRoot = doc.querySelector('[data-composition-id][data-root="true"]');
29
- const root = explicitRoot ?? Array.from(doc.querySelectorAll("[data-composition-id]")).find(
30
- (el) => !el.parentElement?.closest("[data-composition-id]")
31
- ) ?? null;
32
- const raw = root?.getAttribute("data-fps")?.trim();
31
+ const compositions = Array.from(doc.querySelectorAll("*")).filter(
32
+ (element) => getHtmlAttribute(element, "data-composition-id") !== null
33
+ );
34
+ const root = compositions.find((element) => getHtmlAttribute(element, "data-root") === "true") ?? compositions[0];
35
+ const raw = root ? getHtmlAttribute(root, "data-fps")?.trim() : void 0;
33
36
  return raw ? raw : null;
34
37
  }
35
38
  var DEFAULT_CLOUD_FPS = 30;
@@ -7,19 +7,19 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  ambiguousIssue,
9
9
  loadBrowserScript
10
- } from "./chunk-KV72BP7O.js";
10
+ } from "./chunk-6LWUPIKD.js";
11
11
  import {
12
12
  auditClipDurations,
13
13
  shouldIgnoreHttpError,
14
14
  shouldIgnoreRequestFailure
15
- } from "./chunk-SMEF3TRJ.js";
15
+ } from "./chunk-ZH7J2ZUL.js";
16
16
  import {
17
17
  serveStaticProjectHtml
18
- } from "./chunk-T5YF32WV.js";
18
+ } from "./chunk-VPC4XIVI.js";
19
19
  import {
20
20
  artifactDirectory,
21
21
  finishSnapshotRun
22
- } from "./chunk-TMBUBLZB.js";
22
+ } from "./chunk-C4Y3ZREE.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-COETAXRN.js";
30
+ } from "./chunk-7YSFE4SZ.js";
31
31
  import {
32
32
  AUDIT_SEEK_OPTIONS,
33
33
  DEFAULT_ZOOM_PADDING_PX,
@@ -41,20 +41,20 @@ import {
41
41
  seekCompositionTimeline,
42
42
  seekInPage,
43
43
  waitForPreferredSeekTarget
44
- } from "./chunk-JYSSPQDT.js";
44
+ } from "./chunk-4LXZJIVY.js";
45
45
  import {
46
46
  BrowserCleanupError,
47
47
  closeManagedBrowser
48
- } from "./chunk-WY3TQ2PT.js";
48
+ } from "./chunk-UIC7B5KW.js";
49
49
  import {
50
50
  findStageProxyBox
51
- } from "./chunk-COWQITWP.js";
51
+ } from "./chunk-4TKJWWPL.js";
52
52
  import {
53
53
  resolveAutoProxy
54
- } from "./chunk-JJJCFKMF.js";
54
+ } from "./chunk-6XUJVEY2.js";
55
55
  import {
56
56
  normalizeErrorMessage
57
- } from "./chunk-KNU5COPB.js";
57
+ } from "./chunk-T2EUWCJE.js";
58
58
 
59
59
  // src/utils/checkProgress.ts
60
60
  function logCheckProgress(stage, done, total) {
@@ -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-23QDKFSN.js");
392
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-JLB2OYMT.js");
393
393
  const html = await bundleWithLocalizedFonts(project.dir);
394
394
  deadline?.enter("copies");
395
395
  const { findings: drafts, failedPaths } = await preResolveHostileMediaProxies(
@@ -435,8 +435,14 @@ async function runBrowserCheck(project, options, motion, runGrid, deadline, prel
435
435
  const page = session.page;
436
436
  await waitForPreferredSeekTarget(page);
437
437
  const rootAnchor = await resolveRootAnchor(page);
438
+ deadline?.keepPartial(() => ({
439
+ runtimeFindings: dropFailedProxyEchoes(
440
+ keepBrokenImageAborts(drafts, /* @__PURE__ */ new Set()),
441
+ failedPaths
442
+ ).map((draft) => runtimeFinding(draft, rootAnchor))
443
+ }));
438
444
  const launchSettleMs = Date.now() - launchSettleStart;
439
- const { analyzeClipMediaFit } = await import("./src-ZOXSEJCD.js");
445
+ const { analyzeClipMediaFit } = await import("./src-BH5NICGQ.js");
440
446
  for (const entry of await auditClipDurations(page, analyzeClipMediaFit, options.timeout)) {
441
447
  drafts.push({ code: "clip_media_fit", severity: entry.level, message: entry.text, time: 0 });
442
448
  }
@@ -454,7 +460,8 @@ async function runBrowserCheck(project, options, motion, runGrid, deadline, prel
454
460
  motion,
455
461
  helpers,
456
462
  deadline?.enter,
457
- logCheckProgress
463
+ logCheckProgress,
464
+ deadline?.keepPartial
458
465
  );
459
466
  helperSession?.stop();
460
467
  const helper = await helperOpen?.catch(() => void 0);
@@ -552,7 +559,7 @@ function mergeHelperDrafts(primary, helper) {
552
559
  }
553
560
  async function captureFindingCrops(project, options, requests, deadline) {
554
561
  if (requests.length === 0) return [];
555
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-23QDKFSN.js");
562
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-JLB2OYMT.js");
556
563
  const html = await bundleWithLocalizedFonts(project.dir);
557
564
  const server = await serveStaticProjectHtml(
558
565
  project.dir,
@@ -9,13 +9,13 @@ import {
9
9
  markSeen,
10
10
  readSeen,
11
11
  writeRecord
12
- } from "./chunk-DCAI5DBR.js";
12
+ } from "./chunk-2ST4WAFY.js";
13
13
  import {
14
14
  createProjectConfig
15
- } from "./chunk-JJJCFKMF.js";
15
+ } from "./chunk-6XUJVEY2.js";
16
16
  import {
17
17
  isHyperframesProject
18
- } from "./chunk-GM3WIOO6.js";
18
+ } from "./chunk-7HTH5PFK.js";
19
19
 
20
20
  // src/utils/desktopApp.ts
21
21
  import { spawn, spawnSync } from "child_process";
@@ -11,7 +11,7 @@ import {
11
11
  DEFAULT_REGISTRY_URL,
12
12
  fetchItemManifest,
13
13
  fetchRegistryManifest
14
- } from "./chunk-LBNEH6IQ.js";
14
+ } from "./chunk-7QNIXBQD.js";
15
15
 
16
16
  // src/registry/resolver.ts
17
17
  function defaultWarn(message) {
@@ -11,20 +11,20 @@ import {
11
11
  isAllowedHtmlAttribute,
12
12
  isSafeAttributeValue,
13
13
  sanitizeRichTextChildren
14
- } from "./chunk-GM3WIOO6.js";
14
+ } from "./chunk-7HTH5PFK.js";
15
15
  import {
16
16
  EXCLUDED_TAGS,
17
17
  ensureHfIds,
18
18
  mintHfId,
19
19
  walkCompositionDescendants
20
- } from "./chunk-VYQYVYQ5.js";
20
+ } from "./chunk-3W4B6G7Y.js";
21
21
  import {
22
22
  decodedUrlPath,
23
23
  removeElementWithGsapCascade
24
- } from "./chunk-B2A56S5C.js";
24
+ } from "./chunk-2MCXIY4B.js";
25
25
  import {
26
26
  require_dist
27
- } from "./chunk-3NRB7YXW.js";
27
+ } from "./chunk-2VXY3PEF.js";
28
28
  import {
29
29
  readClipTiming,
30
30
  writeClipTiming
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveConfig,
9
9
  usesSoftwareWebGpu
10
- } from "./chunk-NMDUSCCE.js";
10
+ } from "./chunk-L4JB7LI4.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-ZOXSEJCD.js");
20
+ const { resolveBrowserGpuMode } = await import("./src-BH5NICGQ.js");
21
21
  return resolveBrowserGpuMode(requestedMode, { chromePath, probeLifecycle });
22
22
  }
23
23
  function resolveLocalWebGpu(browserGpuMode, requiresWebGpu) {
@@ -6,23 +6,23 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveProject
9
- } from "./chunk-7ZJEQY7Q.js";
9
+ } from "./chunk-LMNZLZMJ.js";
10
10
  import {
11
11
  installPageFunctionGuard,
12
12
  resolveCliChromeGpuMode,
13
13
  seekCompositionTimeline,
14
14
  waitForRuntimeReady
15
- } from "./chunk-JYSSPQDT.js";
15
+ } from "./chunk-4LXZJIVY.js";
16
16
  import {
17
17
  launchManagedBrowser,
18
18
  resolveManagedGpuMode
19
- } from "./chunk-WY3TQ2PT.js";
19
+ } from "./chunk-UIC7B5KW.js";
20
20
  import {
21
21
  pageNavigationTimeoutMs
22
- } from "./chunk-TJKE4EYX.js";
22
+ } from "./chunk-UB7BIDBS.js";
23
23
  import {
24
24
  resolveCompositionViewportFromHtml
25
- } from "./chunk-COWQITWP.js";
25
+ } from "./chunk-4TKJWWPL.js";
26
26
  import {
27
27
  defineCommand
28
28
  } from "./chunk-S3S4TGEH.js";
@@ -35,17 +35,17 @@ import {
35
35
  } from "./chunk-ZTZA4UWZ.js";
36
36
  import {
37
37
  resolveNaturalMediaTimelineDuration
38
- } from "./chunk-LM265QNK.js";
38
+ } from "./chunk-USWPZXEA.js";
39
39
  import {
40
40
  decodeWellFormedEscapes
41
41
  } from "./chunk-BSQ7XANM.js";
42
42
  import {
43
43
  printDeprecationNotice,
44
44
  withMeta
45
- } from "./chunk-KAC2WR7P.js";
45
+ } from "./chunk-TZEKVLPV.js";
46
46
  import {
47
47
  normalizeErrorMessage
48
- } from "./chunk-KNU5COPB.js";
48
+ } from "./chunk-T2EUWCJE.js";
49
49
 
50
50
  // src/commands/validate.ts
51
51
  import { existsSync, mkdtempSync, readFileSync, rmSync } from "fs";
@@ -239,7 +239,7 @@ function extractCompositionErrorsFromLint(lintResult) {
239
239
  async function localizeRemoteAssets(html) {
240
240
  let dir;
241
241
  try {
242
- const { loadProducer } = await import("./producer-2QG7HLAW.js");
242
+ const { loadProducer } = await import("./producer-23KVQZAB.js");
243
243
  const { localizeRemoteMediaSources, localizeRemoteImageSources, localizeRemoteFontFaces } = await loadProducer();
244
244
  dir = mkdtempSync(join(tmpdir(), "hf-validate-assets-"));
245
245
  const assetDir = dir;
@@ -260,10 +260,10 @@ async function localizeRemoteAssets(html) {
260
260
  }
261
261
  async function validateInBrowser(project, opts) {
262
262
  const projectDir = project.dir;
263
- const { bundleToSingleHtml } = await import("./compiler-MA2ELZPG.js");
264
- const { ensureBrowser } = await import("./manager-UHWEKPXC.js");
265
- const { serveStaticProjectHtml } = await import("./staticProjectServer-LSVIRDRO.js");
266
- const { lintProject } = await import("./lintProject-F7IC7WY4.js");
263
+ const { bundleToSingleHtml } = await import("./compiler-R4UYDWXO.js");
264
+ const { ensureBrowser } = await import("./manager-MZIJY73J.js");
265
+ const { serveStaticProjectHtml } = await import("./staticProjectServer-BKXL5CXB.js");
266
+ const { lintProject } = await import("./lintProject-52SLJPRC.js");
267
267
  const lintResult = await lintProject(projectDir);
268
268
  const compositionErrors = extractCompositionErrorsFromLint(lintResult);
269
269
  const html = await bundleToSingleHtml(projectDir);
@@ -284,9 +284,9 @@ async function validateInBrowser(project, opts) {
284
284
  try {
285
285
  const browser = await ensureBrowser();
286
286
  const puppeteer = await import("puppeteer-core");
287
- const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-ZOXSEJCD.js");
287
+ const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-BH5NICGQ.js");
288
288
  const requestedGpuMode = resolveCliChromeGpuMode();
289
- const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalWebGpu } = await import("./gpuPolicy-H6ABHVEB.js");
289
+ const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalWebGpu } = await import("./gpuPolicy-6UBXO6ME.js");
290
290
  const resolvedGpuMode = await resolveManagedGpuMode(requestedGpuMode, browser.executablePath);
291
291
  const requiresWebGpu = compositionRequiresWebGpu(html);
292
292
  const { gpuConfig, softwareWebGpu } = resolveLocalWebGpu(resolvedGpuMode, requiresWebGpu);
@@ -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-MSM6VRQ4.js";
9
+ } from "./chunk-LFUVTS6V.js";
10
10
 
11
11
  // src/registry/compatibility.ts
12
12
  import { compareVersions } from "compare-versions";
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  loadOptionalPackage,
9
9
  loadSharp
10
- } from "./chunk-QH3T4WI2.js";
10
+ } from "./chunk-EXAX37XR.js";
11
11
  import {
12
12
  downloadFile
13
13
  } from "./chunk-WQ6ZXHFQ.js";
@@ -15,13 +15,16 @@ import {
15
15
  findFFmpeg,
16
16
  findFFprobe,
17
17
  getFFmpegInstallHint
18
- } from "./chunk-GLG5JWLI.js";
18
+ } from "./chunk-DYNHVCBF.js";
19
19
  import {
20
20
  DEFAULT_VP9_CPU_USED,
21
21
  SDR_RGB_TO_BT709_FILTER,
22
22
  SDR_RGB_TO_TAGGED_BT709_FILTER,
23
23
  renderProvenanceArgs
24
- } from "./chunk-NMDUSCCE.js";
24
+ } from "./chunk-L4JB7LI4.js";
25
+ import {
26
+ runCancellableProcess
27
+ } from "./chunk-RWGASWT7.js";
25
28
 
26
29
  // src/background-removal/pipeline.ts
27
30
  import { spawn } from "child_process";
@@ -135,11 +138,29 @@ async function createSession(options = {}) {
135
138
  const maskBuf = Buffer.allocUnsafe(INPUT_PLANE);
136
139
  let rgbaBuf = null;
137
140
  let rgbaBgBuf = null;
141
+ let retried = false;
142
+ const run = async (tensor) => {
143
+ try {
144
+ return await session.run({ [inputName]: tensor });
145
+ } catch (err) {
146
+ if (providerUsed === "CPU" || retried) throw err;
147
+ retried = true;
148
+ options.onProgress?.(
149
+ `${providerUsed} failed while running a frame (${err.message}); continuing on CPU.`
150
+ );
151
+ await session.release().catch(() => void 0);
152
+ session = await tryCreate(["cpu"]);
153
+ providerUsed = "CPU";
154
+ return await session.run({ [inputName]: tensor });
155
+ }
156
+ };
138
157
  return {
139
- provider: providerUsed,
158
+ get provider() {
159
+ return providerUsed;
160
+ },
140
161
  async process(rgb, width, height, withBackground = false) {
141
162
  const tensor = await preprocess(sharp, ort, rgb, width, height, inputData);
142
- const outputs = await session.run({ [inputName]: tensor });
163
+ const outputs = await run(tensor);
143
164
  const output = outputs[outputName];
144
165
  if (!output) throw new Error(`Model did not return output '${outputName}'`);
145
166
  const expectedBytes = width * height * 4;
@@ -260,16 +281,56 @@ function inferInputKind(inputPath) {
260
281
  `Unsupported input: ${ext}. Use a video (mp4/mov/webm/mkv/avi) or image (jpg/png/webp).`
261
282
  );
262
283
  }
284
+ async function decoderTransposesDimensions(inputPath) {
285
+ const ffprobePath = findFFprobe();
286
+ if (!ffprobePath) throw new Error(`ffprobe is required. Install: ${getFFmpegInstallHint()}`);
287
+ const { stdout } = await runCancellableProcess(
288
+ ffprobePath,
289
+ [
290
+ "-v",
291
+ "error",
292
+ "-select_streams",
293
+ "v:0",
294
+ "-show_streams",
295
+ "-print_format",
296
+ "json",
297
+ "--",
298
+ inputPath
299
+ ],
300
+ { timeoutMs: 3e4, maxBufferBytes: 256 * 1024 }
301
+ );
302
+ const probe = JSON.parse(stdout);
303
+ if (typeof probe !== "object" || probe === null || !("streams" in probe) || !Array.isArray(probe.streams))
304
+ return false;
305
+ const stream = probe.streams[0];
306
+ if (typeof stream !== "object" || stream === null) return false;
307
+ const sideData = "side_data_list" in stream && Array.isArray(stream.side_data_list) ? stream.side_data_list : [];
308
+ const matrix = sideData.find(
309
+ (entry) => typeof entry === "object" && entry !== null && "side_data_type" in entry && entry.side_data_type === "Display Matrix"
310
+ );
311
+ let rotation = typeof matrix === "object" && matrix !== null && "rotation" in matrix ? matrix.rotation : void 0;
312
+ if (rotation === void 0 && "tags" in stream && typeof stream.tags === "object" && stream.tags !== null && "rotate" in stream.tags)
313
+ rotation = Number(stream.tags.rotate);
314
+ if (typeof rotation !== "number" || !Number.isFinite(rotation)) return false;
315
+ const angle = (rotation % 360 + 360) % 360;
316
+ return Math.abs(angle - 90) < 1 || Math.abs(angle - 270) < 1;
317
+ }
263
318
  async function probeMedia(inputPath) {
264
319
  const isImage = inferInputKind(inputPath) === "image";
265
- const engine = await import("./src-ZOXSEJCD.js");
320
+ const engine = await import("./src-BH5NICGQ.js");
266
321
  const meta = await engine.extractMediaMetadata(inputPath);
267
322
  if (isImage) {
268
323
  return { width: meta.width, height: meta.height, fps: 0, frameCount: 1 };
269
324
  }
270
325
  const fps = meta.fps || 30;
271
326
  const frameCount = meta.durationSeconds ? Math.round(meta.durationSeconds * fps) : 0;
272
- return { width: meta.width, height: meta.height, fps, frameCount };
327
+ const transposed = await decoderTransposesDimensions(inputPath);
328
+ return {
329
+ width: transposed ? meta.height : meta.width,
330
+ height: transposed ? meta.width : meta.height,
331
+ fps,
332
+ frameCount
333
+ };
273
334
  }
274
335
  function buildEncoderArgs(format, width, height, fps, outputPath, quality = DEFAULT_QUALITY) {
275
336
  const base = [
@@ -34,10 +34,10 @@ import {
34
34
  readConfig,
35
35
  telemetryRuntimeOverride,
36
36
  writeConfig
37
- } from "./chunk-XUXGIA7H.js";
37
+ } from "./chunk-6NLPPKBO.js";
38
38
  import {
39
39
  VERSION
40
- } from "./chunk-MSM6VRQ4.js";
40
+ } from "./chunk-LFUVTS6V.js";
41
41
 
42
42
  // src/telemetry/transport.ts
43
43
  import { spawn } from "child_process";