hyperframes 0.8.151 → 0.8.152

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 (165) hide show
  1. package/dist/{add-QKZZG7A2.js → add-SA33REHW.js} +14 -14
  2. package/dist/{animatedGifPrep-YQDPYGOD.js → animatedGifPrep-3YXJQZ7L.js} +9 -9
  3. package/dist/api.js +15 -15
  4. package/dist/{asset-3Q737Y4H.js → asset-PUVPTWPD.js} +2 -2
  5. package/dist/{assetCataloger-BTHEBJJB.js → assetCataloger-VWE2PLBX.js} +4 -4
  6. package/dist/{auth-XL7EU3SO.js → auth-PS3M6AI7.js} +1 -1
  7. package/dist/{autoUpdate-PJFLTQ3U.js → autoUpdate-CMO4SHWU.js} +2 -2
  8. package/dist/{backgroundChecks-T5TIR5WK.js → backgroundChecks-EDZ2A55J.js} +3 -3
  9. package/dist/backgroundChecksWorker.js +3 -3
  10. package/dist/{batchRender-NFLVIDB4.js → batchRender-7PLJISCN.js} +5 -5
  11. package/dist/{beats-JU4GZ26R.js → beats-2MDSIOE7.js} +14 -14
  12. package/dist/{benchmark-7U2YWLTW.js → benchmark-KBBXAPI4.js} +10 -10
  13. package/dist/{browser-D57UPYDA.js → browser-OMWKZRSW.js} +3 -3
  14. package/dist/{bundleWithLocalizedFonts-26MXQOZG.js → bundleWithLocalizedFonts-76DMCRIW.js} +2 -2
  15. package/dist/{capture-47BV25G3.js → capture-LRUUXH5Q.js} +2 -2
  16. package/dist/{capture-LT252COQ.js → capture-YGDC7GN3.js} +12 -12
  17. package/dist/{catalog-BEZXOV4O.js → catalog-SMEBKEVO.js} +14 -14
  18. package/dist/{catch-up-KVV5X6BF.js → catch-up-OMILX3WE.js} +4 -4
  19. package/dist/{check-6KQ433E6.js → check-NUZ62LIW.js} +131 -43
  20. package/dist/{checkBrowser-PRDR6XBY.js → checkBrowser-MSTVEL4V.js} +39 -38
  21. package/dist/{chunk-L6RIMCMG.js → chunk-3DZBQ7MH.js} +3 -3
  22. package/dist/{chunk-POEEDPJI.js → chunk-3E4OCOC5.js} +1 -1
  23. package/dist/{chunk-YZTVHRJ2.js → chunk-3HPJM5IQ.js} +1 -1
  24. package/dist/{chunk-OZ4K46OV.js → chunk-3LO7BBJX.js} +2 -2
  25. package/dist/{chunk-APDLWWFG.js → chunk-3VGU2SH7.js} +1 -1
  26. package/dist/{chunk-RRBKEHST.js → chunk-4UMKAUZI.js} +1 -1
  27. package/dist/{chunk-DHPFXAUF.js → chunk-57GN6KWT.js} +17 -3
  28. package/dist/{chunk-374QQGBQ.js → chunk-5CS4T6C6.js} +63 -12
  29. package/dist/{chunk-XQKVEQNY.js → chunk-5ERVRJMV.js} +2 -2
  30. package/dist/{chunk-S22FKF6G.js → chunk-5VMSUW4Z.js} +2 -2
  31. package/dist/{chunk-N4IXP3MY.js → chunk-6Z4YJ5Q3.js} +3 -3
  32. package/dist/{chunk-FJWEYVEM.js → chunk-7FYFEXD2.js} +658 -198
  33. package/dist/{chunk-4LE27ST4.js → chunk-7NPSXBIN.js} +2 -2
  34. package/dist/chunk-7TASSBN2.js +215 -0
  35. package/dist/{chunk-IP73NMQT.js → chunk-ANS56TPS.js} +10 -10
  36. package/dist/{chunk-PUIELIFA.js → chunk-BQK3J7XO.js} +1 -1
  37. package/dist/{chunk-RJRGR5KF.js → chunk-BYJYQWEX.js} +9 -9
  38. package/dist/{chunk-XXPYZBZ3.js → chunk-C6TPGUWD.js} +2 -2
  39. package/dist/{chunk-FAIYEIZ4.js → chunk-D6RJXQLD.js} +1 -1
  40. package/dist/{chunk-N3I6RAOR.js → chunk-DFXK7KUO.js} +11 -11
  41. package/dist/{chunk-DIOBKUBV.js → chunk-E6EYZ33P.js} +2 -2
  42. package/dist/{chunk-ZGCRVM5M.js → chunk-EVTHG34H.js} +2 -2
  43. package/dist/{chunk-IZPN423R.js → chunk-EXH6L2XZ.js} +2 -2
  44. package/dist/{chunk-AIJS74LG.js → chunk-FFDC5OWV.js} +8 -2
  45. package/dist/{chunk-KQGWP4KH.js → chunk-FNN5QINS.js} +1 -1
  46. package/dist/{chunk-DMKI64EZ.js → chunk-FSZAFCU7.js} +1 -1
  47. package/dist/{chunk-L3N7RJHS.js → chunk-GQETH4PE.js} +3 -3
  48. package/dist/{chunk-ZD3RDNZI.js → chunk-H2SGM2V2.js} +1 -1
  49. package/dist/{chunk-OSAH7S5M.js → chunk-H7FXBK3Q.js} +1 -1
  50. package/dist/{chunk-BRF3O35X.js → chunk-HBCRRCTX.js} +109 -31
  51. package/dist/{chunk-KXX6NLOT.js → chunk-IBYC3VUA.js} +1 -1
  52. package/dist/{chunk-IPDS2SWI.js → chunk-IEDT4EXE.js} +1 -1
  53. package/dist/{chunk-TCWMDCBX.js → chunk-IZIRIDJH.js} +2 -2
  54. package/dist/{chunk-4PKQEKAI.js → chunk-IZKXUYZE.js} +2 -2
  55. package/dist/chunk-KCFF4ENE.js +24 -0
  56. package/dist/{chunk-IZ7L6V76.js → chunk-KZ3L3W4Q.js} +1 -1
  57. package/dist/{chunk-YEBKEWKB.js → chunk-LECTCGGS.js} +1 -1
  58. package/dist/{chunk-O3DUX6P2.js → chunk-LVPSWUS6.js} +4 -4
  59. package/dist/{chunk-LKQS72D5.js → chunk-MNHPG2UO.js} +1 -1
  60. package/dist/{chunk-XKKBIFE5.js → chunk-NHAG2KCE.js} +7 -7
  61. package/dist/{chunk-HVXRYMGQ.js → chunk-PKO2EWO7.js} +1 -1
  62. package/dist/{chunk-XNDXENJQ.js → chunk-PRXAOZWZ.js} +3 -3
  63. package/dist/{chunk-4YZYYP7V.js → chunk-PTXZDSW5.js} +3 -3
  64. package/dist/{chunk-QF7AE3DB.js → chunk-QECEOV6W.js} +1 -1
  65. package/dist/{chunk-XGLNQDLN.js → chunk-QESSGUKX.js} +1 -1
  66. package/dist/{chunk-3SVC7SW4.js → chunk-RN5I2DP5.js} +3 -3
  67. package/dist/{chunk-QBYHNRHU.js → chunk-S3RCK56N.js} +1 -1
  68. package/dist/{chunk-RYL6ZIJP.js → chunk-SWCSL6WS.js} +5 -5
  69. package/dist/{chunk-2PSPARWP.js → chunk-TYXH3EKP.js} +4 -0
  70. package/dist/{chunk-FMNVTKX2.js → chunk-U3BCDVZO.js} +1 -1
  71. package/dist/{chunk-FLVI7FHU.js → chunk-VS732BUG.js} +1 -1
  72. package/dist/{chunk-LFNQDTSH.js → chunk-VYKPBRCB.js} +63 -12
  73. package/dist/{chunk-QLGBNGXC.js → chunk-XEFFJRYX.js} +2 -2
  74. package/dist/{chunk-3ZPFRDEJ.js → chunk-XINGD6MS.js} +4 -4
  75. package/dist/chunk-XSEGMQYA.js +30 -0
  76. package/dist/{chunk-GNTVYF7E.js → chunk-YOEGUBBY.js} +5 -5
  77. package/dist/{chunk-35PWWBGZ.js → chunk-YYEYOFHW.js} +1 -1
  78. package/dist/{chunk-XYHBVSWD.js → chunk-ZTM3RMAD.js} +2 -2
  79. package/dist/{clean-RLTHFTQA.js → clean-F75G45BI.js} +52 -31
  80. package/dist/cli.js +53 -53
  81. package/dist/{cloud-Q5TGBTW3.js → cloud-KVJAOUWH.js} +4 -4
  82. package/dist/{cloudrun-4UZF74MV.js → cloudrun-Q7Q7O4GY.js} +6 -6
  83. package/dist/{compare-Q5UNR2V4.js → compare-DGUJ4QWU.js} +30 -30
  84. package/dist/{compiler-ZXT27Z62.js → compiler-NCN6PTVH.js} +6 -6
  85. package/dist/{component-H734P32V.js → component-PSYGT3JV.js} +3 -3
  86. package/dist/{compositions-YEHDSTDR.js → compositions-J3GAETIC.js} +13 -13
  87. package/dist/{delete-LDBMPWRT.js → delete-MR7LRGRP.js} +2 -2
  88. package/dist/{deterministicFonts-C5JQLCTS.js → deterministicFonts-EOMDR6ZF.js} +3 -3
  89. package/dist/{dist-RGE4QASU.js → dist-2YYJYYPY.js} +3 -3
  90. package/dist/{dist-7JXLFD6U.js → dist-3MHXG6EJ.js} +4 -4
  91. package/dist/{doctor-XNJFIWJ7.js → doctor-JOUGR5UK.js} +11 -11
  92. package/dist/{events-UKCPUWMH.js → events-63BKDWVO.js} +3 -3
  93. package/dist/{events-G6UFLNXR.js → events-FZFBJCIH.js} +2 -2
  94. package/dist/{feedback-CK3KZ7DE.js → feedback-QLKWUDXR.js} +8 -8
  95. package/dist/{figma-3D5C737B.js → figma-YJ7HGVQC.js} +3 -3
  96. package/dist/fontLocalizeCli.js +12 -12
  97. package/dist/{get-QGTQUWFT.js → get-54MUUXMR.js} +2 -2
  98. package/dist/{gpuPolicy-G5QAQDYF.js → gpuPolicy-5OVNR75D.js} +9 -9
  99. package/dist/{grade-compare-XIHOM62P.js → grade-compare-7IDUF673.js} +30 -30
  100. package/dist/{gsapParserAcorn-VXZ3ZIF2.js → gsapParserAcorn-7NCK2LVT.js} +2 -2
  101. package/dist/{help-U5UBXT52.js → help-GQFYO5LU.js} +1 -1
  102. package/dist/{history-5J73QZSA.js → history-UI3O7CSO.js} +77 -205
  103. package/dist/hyperframes-player.global.js +1 -1
  104. package/dist/{info-RJHQQQUP.js → info-VQV3APEX.js} +9 -9
  105. package/dist/{init-M6UQOYYC.js → init-2UBFV5D7.js} +24 -24
  106. package/dist/{inspect-PRQWDBTP.js → inspect-36ACJ3CO.js} +31 -31
  107. package/dist/{installer-ZL7UKYK5.js → installer-GDUZDJG4.js} +7 -7
  108. package/dist/{keyframes-VMUJYTCQ.js → keyframes-GPBU34BG.js} +227 -82
  109. package/dist/{lambda-ON42DRQD.js → lambda-CBJVLTHY.js} +7 -7
  110. package/dist/{layout-QKBFVDVY.js → layout-2IHFV6EI.js} +31 -31
  111. package/dist/{lint-ZQHHL2SV.js → lint-IR6IYCEO.js} +9 -9
  112. package/dist/{lintProject-3Z6OJCSO.js → lintProject-XQWXJYSC.js} +3 -3
  113. package/dist/{list-YBRKIWGF.js → list-UAGKWARH.js} +2 -2
  114. package/dist/{login-4B2YXGLB.js → login-2GYCNCZF.js} +4 -4
  115. package/dist/{media-treatment-5C5EJAAP.js → media-treatment-Z553F7XI.js} +12 -12
  116. package/dist/{models-R7ZDWBJ6.js → models-6AZTNNSO.js} +12 -12
  117. package/dist/{motionShot-ZHESZNUL.js → motionShot-ARRL7WXT.js} +28 -15
  118. package/dist/{normalize-audio-EVWZVTBM.js → normalize-audio-CME4NUB6.js} +6 -6
  119. package/dist/{open-TV6HT4UT.js → open-HU2VXUFD.js} +4 -4
  120. package/dist/{parakeetRunner-YVVF4CG6.js → parakeetRunner-X5MKFMCB.js} +12 -12
  121. package/dist/{pipeline-ETR5SEBS.js → pipeline-MNFTEBJU.js} +9 -9
  122. package/dist/{play-C6WONRZV.js → play-2BBJDDAZ.js} +24 -24
  123. package/dist/{present-RANXTVPA.js → present-OE2WL2NY.js} +20 -20
  124. package/dist/{preview-KF6UMBT2.js → preview-RYSCCAWJ.js} +19 -19
  125. package/dist/{producer-CY2GXBWN.js → producer-SQWNRO66.js} +1 -1
  126. package/dist/{projectConfig-KPXCNMBM.js → projectConfig-B55Z7YKQ.js} +9 -9
  127. package/dist/{publication-Y36N4A7E.js → publication-MDZCOBJP.js} +4 -4
  128. package/dist/{publish-RCQJO35C.js → publish-AILV36BO.js} +12 -12
  129. package/dist/{remove-background-3ZMXVWLB.js → remove-background-6F72LKHG.js} +10 -10
  130. package/dist/{render-PTNEFO5U.js → render-2MZKU3L5.js} +10 -10
  131. package/dist/{render-FKVRCDT2.js → render-5EREH6YD.js} +57 -22
  132. package/dist/{render-WUSTRMUD.js → render-6GH5FSXU.js} +5 -5
  133. package/dist/{render-batch-AQHU2JWZ.js → render-batch-UMBUQWWS.js} +5 -5
  134. package/dist/renderSetupWorker.js +3 -3
  135. package/dist/{resolver-L5BDZJKU.js → resolver-KO6WWO5P.js} +6 -6
  136. package/dist/{sherpa-3S3ISG7G.js → sherpa-DADGYWNR.js} +11 -11
  137. package/dist/skills/hyperframes-cli/SKILL.md +3 -0
  138. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +5 -1
  139. package/dist/{skills-X4WQEKNF.js → skills-QLKSNU4Y.js} +5 -5
  140. package/dist/{skillsUpdateCheck-UYCVHDZ6.js → skillsUpdateCheck-Z2QQGF2W.js} +3 -3
  141. package/dist/{snapshot-YEYHQEZQ.js → snapshot-D5BBFXOS.js} +118 -41
  142. package/dist/{src-2NN2WB6X.js → src-AVQBAECC.js} +8 -8
  143. package/dist/{src-OLBDPEG6.js → src-V7263E47.js} +11 -11
  144. package/dist/{staticProjectServer-7H35NMWB.js → staticProjectServer-HNWSVEWN.js} +20 -20
  145. package/dist/studio/assets/{hyperframes-player-DJt8E7k4.js → hyperframes-player-0BY7-PK7.js} +1 -1
  146. package/dist/studio/assets/{index-DWIHrAY2.js → index-COrWdzlj.js} +1 -1
  147. package/dist/studio/assets/{index-BGks9KLI.js → index-p-VXwuJ2.js} +132 -132
  148. package/dist/studio/assets/{index-DgbLblGR.js → index-rmD5k_ES.js} +1 -1
  149. package/dist/studio/index.html +1 -1
  150. package/dist/{studio-api-HGM2A5I3.js → studio-api-UXKTDWLT.js} +30 -16
  151. package/dist/{studioServer-M6XFL7N6.js → studioServer-JOVR24O3.js} +43 -43
  152. package/dist/{synthesize-22B7L5GX.js → synthesize-MBDVUSH3.js} +2 -1
  153. package/dist/{telemetry-KVCZKVTE.js → telemetry-UW7XAM5W.js} +3 -3
  154. package/dist/{timeline-VYYKZR4V.js → timeline-JSGTZ3AN.js} +20 -20
  155. package/dist/{tokens-B5NFFL55.js → tokens-ADDBGTQ7.js} +2 -2
  156. package/dist/{transcribe-SBETOIWI.js → transcribe-FEHOK626.js} +10 -10
  157. package/dist/{transcribe-WNFRYZAC.js → transcribe-P6MJGSZJ.js} +16 -16
  158. package/dist/{tts-QSAQZVEZ.js → tts-POI553RG.js} +1 -1
  159. package/dist/{updateCheck-5MM2DFUC.js → updateCheck-IBWMLXQ4.js} +2 -2
  160. package/dist/{upgrade-LWID54R3.js → upgrade-NHZ7AYPO.js} +2 -2
  161. package/dist/{urlDownloader-CVLNXFDG.js → urlDownloader-ULDRBWS5.js} +8 -8
  162. package/dist/{validate-V4CGQ6OF.js → validate-NVWNXNBV.js} +25 -25
  163. package/dist/{video-VJB2KRSS.js → video-74DRD2DN.js} +9 -9
  164. package/package.json +1 -1
  165. package/dist/chunk-WBLXWOYK.js +0 -15
@@ -8,33 +8,33 @@ import {
8
8
  resolveCaptureBrowserGpuMode,
9
9
  resolveLocalBrowserGpuMode,
10
10
  resolveLocalWebGpu
11
- } from "./chunk-ZGCRVM5M.js";
11
+ } from "./chunk-EVTHG34H.js";
12
12
  import {
13
13
  assertWebGpuAdapterAvailable,
14
14
  compositionRequiresWebGpu
15
- } from "./chunk-IZPN423R.js";
16
- import "./chunk-3SVC7SW4.js";
15
+ } from "./chunk-EXH6L2XZ.js";
16
+ import "./chunk-RN5I2DP5.js";
17
17
  import "./chunk-NE55C6S5.js";
18
18
  import "./chunk-JYVGYKXG.js";
19
- import "./chunk-XQKVEQNY.js";
20
- import "./chunk-QBYHNRHU.js";
19
+ import "./chunk-5ERVRJMV.js";
20
+ import "./chunk-S3RCK56N.js";
21
21
  import "./chunk-VC76R6W2.js";
22
22
  import "./chunk-UJKQWGFF.js";
23
- import "./chunk-LFNQDTSH.js";
23
+ import "./chunk-VYKPBRCB.js";
24
24
  import "./chunk-OFQWTKPW.js";
25
25
  import "./chunk-DPVXBVLL.js";
26
26
  import "./chunk-T76PLPD6.js";
27
27
  import "./chunk-FXMKHHPO.js";
28
28
  import "./chunk-RQVDTPGD.js";
29
29
  import "./chunk-TWWSYAKJ.js";
30
- import "./chunk-GNTVYF7E.js";
30
+ import "./chunk-YOEGUBBY.js";
31
31
  import "./chunk-IWFLMU2N.js";
32
- import "./chunk-APDLWWFG.js";
32
+ import "./chunk-3VGU2SH7.js";
33
33
  import "./chunk-VAS6HQX3.js";
34
34
  import "./chunk-3RM2ETQT.js";
35
35
  import "./chunk-BSQ7XANM.js";
36
36
  import "./chunk-SDYDNHEE.js";
37
- import "./chunk-2PSPARWP.js";
37
+ import "./chunk-TYXH3EKP.js";
38
38
  import "./chunk-IXLUTE6N.js";
39
39
  import "./chunk-3GXQPCJC.js";
40
40
  import "./chunk-M2WBOQ2Q.js";
@@ -11,42 +11,42 @@ import {
11
11
  } from "./chunk-ZKDMAOFU.js";
12
12
  import {
13
13
  serveStaticProjectHtml
14
- } from "./chunk-L3N7RJHS.js";
14
+ } from "./chunk-GQETH4PE.js";
15
15
  import "./chunk-XUHOIDKG.js";
16
- import "./chunk-QLGBNGXC.js";
16
+ import "./chunk-XEFFJRYX.js";
17
17
  import "./chunk-X7MTZ4T2.js";
18
18
  import {
19
19
  openSettledCompositionPage,
20
20
  runFfmpegOnce
21
- } from "./chunk-RYL6ZIJP.js";
21
+ } from "./chunk-SWCSL6WS.js";
22
22
  import "./chunk-FH7WODJH.js";
23
- import "./chunk-RRBKEHST.js";
24
- import "./chunk-HVXRYMGQ.js";
23
+ import "./chunk-4UMKAUZI.js";
24
+ import "./chunk-PKO2EWO7.js";
25
25
  import "./chunk-WPNE5NEP.js";
26
- import "./chunk-BRF3O35X.js";
27
- import "./chunk-XNDXENJQ.js";
28
- import "./chunk-FJWEYVEM.js";
29
- import "./chunk-XXPYZBZ3.js";
30
- import "./chunk-3ZPFRDEJ.js";
31
- import "./chunk-AIJS74LG.js";
26
+ import "./chunk-HBCRRCTX.js";
27
+ import "./chunk-PRXAOZWZ.js";
28
+ import "./chunk-C6TPGUWD.js";
29
+ import "./chunk-7FYFEXD2.js";
30
+ import "./chunk-XINGD6MS.js";
31
+ import "./chunk-FFDC5OWV.js";
32
32
  import "./chunk-K2FLNJVB.js";
33
- import "./chunk-ZGCRVM5M.js";
33
+ import "./chunk-EVTHG34H.js";
34
34
  import "./chunk-442JNXRM.js";
35
- import "./chunk-FAIYEIZ4.js";
35
+ import "./chunk-D6RJXQLD.js";
36
36
  import "./chunk-XT7X6QCP.js";
37
37
  import "./chunk-4YYJOFKS.js";
38
38
  import "./chunk-HVW7ABXD.js";
39
- import "./chunk-XGLNQDLN.js";
40
- import "./chunk-N4IXP3MY.js";
41
- import "./chunk-YZTVHRJ2.js";
39
+ import "./chunk-QESSGUKX.js";
40
+ import "./chunk-6Z4YJ5Q3.js";
41
+ import "./chunk-3HPJM5IQ.js";
42
42
  import "./chunk-AWDFDFI3.js";
43
43
  import "./chunk-P6LJ4Y32.js";
44
44
  import "./chunk-GMECXFAN.js";
45
- import "./chunk-374QQGBQ.js";
45
+ import "./chunk-5CS4T6C6.js";
46
46
  import {
47
47
  trackCompareSheet
48
- } from "./chunk-ZD3RDNZI.js";
49
- import "./chunk-IZ7L6V76.js";
48
+ } from "./chunk-H2SGM2V2.js";
49
+ import "./chunk-KZ3L3W4Q.js";
50
50
  import "./chunk-VWG7OQKU.js";
51
51
  import "./chunk-XBSPQ52S.js";
52
52
  import {
@@ -63,34 +63,34 @@ import "./chunk-EOOEC32M.js";
63
63
  import "./chunk-TJSTGSAW.js";
64
64
  import {
65
65
  withMeta
66
- } from "./chunk-35PWWBGZ.js";
66
+ } from "./chunk-YYEYOFHW.js";
67
67
  import "./chunk-K4WIOZFP.js";
68
68
  import "./chunk-XUXGIA7H.js";
69
69
  import "./chunk-WERLJGIC.js";
70
70
  import "./chunk-ISN5GRYI.js";
71
- import "./chunk-TCWMDCBX.js";
71
+ import "./chunk-IZIRIDJH.js";
72
72
  import "./chunk-EOVYQ3IG.js";
73
73
  import {
74
74
  findFFmpeg
75
75
  } from "./chunk-4MLYMDQ4.js";
76
76
  import "./chunk-AMKC3AXA.js";
77
- import "./chunk-IZPN423R.js";
78
- import "./chunk-3SVC7SW4.js";
77
+ import "./chunk-EXH6L2XZ.js";
78
+ import "./chunk-RN5I2DP5.js";
79
79
  import "./chunk-NE55C6S5.js";
80
80
  import "./chunk-JYVGYKXG.js";
81
81
  import {
82
82
  gsapCdnDist
83
- } from "./chunk-XQKVEQNY.js";
83
+ } from "./chunk-5ERVRJMV.js";
84
84
  import {
85
85
  HF_COLOR_GRADING_ATTR,
86
86
  isHfColorGradingActive,
87
87
  normalizeHfColorGrading,
88
88
  parseCubeLut,
89
89
  serializeHfColorGrading
90
- } from "./chunk-QBYHNRHU.js";
90
+ } from "./chunk-S3RCK56N.js";
91
91
  import "./chunk-VC76R6W2.js";
92
92
  import "./chunk-UJKQWGFF.js";
93
- import "./chunk-LFNQDTSH.js";
93
+ import "./chunk-VYKPBRCB.js";
94
94
  import "./chunk-OFQWTKPW.js";
95
95
  import "./chunk-DPVXBVLL.js";
96
96
  import "./chunk-T76PLPD6.js";
@@ -98,14 +98,14 @@ import "./chunk-FXMKHHPO.js";
98
98
  import "./chunk-RQVDTPGD.js";
99
99
  import "./chunk-54DMWFQZ.js";
100
100
  import "./chunk-TWWSYAKJ.js";
101
- import "./chunk-GNTVYF7E.js";
101
+ import "./chunk-YOEGUBBY.js";
102
102
  import "./chunk-IWFLMU2N.js";
103
- import "./chunk-APDLWWFG.js";
103
+ import "./chunk-3VGU2SH7.js";
104
104
  import "./chunk-VAS6HQX3.js";
105
105
  import "./chunk-3RM2ETQT.js";
106
106
  import "./chunk-BSQ7XANM.js";
107
107
  import "./chunk-SDYDNHEE.js";
108
- import "./chunk-2PSPARWP.js";
108
+ import "./chunk-TYXH3EKP.js";
109
109
  import "./chunk-IXLUTE6N.js";
110
110
  import {
111
111
  normalizeErrorMessage
@@ -499,7 +499,7 @@ async function loadReferenceFrame(framePath) {
499
499
  };
500
500
  }
501
501
  async function captureGradeCompareSheet(projectDir, timeoutMs) {
502
- const { bundleToSingleHtml } = await import("./compiler-ZXT27Z62.js");
502
+ const { bundleToSingleHtml } = await import("./compiler-NCN6PTVH.js");
503
503
  const html = await bundleToSingleHtml(projectDir);
504
504
  const server = await serveStaticProjectHtml(projectDir, html);
505
505
  const sheetPath = join(projectDir, "grade-compare.png");
@@ -14,8 +14,8 @@ import {
14
14
  parseGsapScriptAcorn,
15
15
  parseGsapScriptAcornForWrite,
16
16
  scriptShape
17
- } from "./chunk-374QQGBQ.js";
18
- import "./chunk-2PSPARWP.js";
17
+ } from "./chunk-5CS4T6C6.js";
18
+ import "./chunk-TYXH3EKP.js";
19
19
  import "./chunk-M2WBOQ2Q.js";
20
20
  export {
21
21
  buildArcPath,
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-ZTZA4UWZ.js";
13
13
  import {
14
14
  VERSION
15
- } from "./chunk-TCWMDCBX.js";
15
+ } from "./chunk-IZIRIDJH.js";
16
16
  import "./chunk-M2WBOQ2Q.js";
17
17
 
18
18
  // src/help.ts
@@ -5,28 +5,29 @@ 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
- DEFAULT_HISTORY_ROOT,
8
+ Refusal,
9
+ endTurn,
10
+ historyDeps,
11
+ lastTurnParts,
12
+ withOwner,
13
+ withReader,
14
+ writeTurn
15
+ } from "./chunk-7TASSBN2.js";
16
+ import {
9
17
  HistoryBusyError,
10
18
  HistoryIdError,
11
- MAX_WINDOW_IDLE_MS,
12
- START,
13
- openProjectHistory,
14
- readProjectHistory
15
- } from "./chunk-FJWEYVEM.js";
16
- import "./chunk-AIJS74LG.js";
17
- import {
18
- resolveProject
19
- } from "./chunk-KXX6NLOT.js";
19
+ START
20
+ } from "./chunk-7FYFEXD2.js";
21
+ import "./chunk-FFDC5OWV.js";
22
+ import "./chunk-IBYC3VUA.js";
20
23
  import "./chunk-K2FLNJVB.js";
21
24
  import {
22
- AmbiguousPreviewServerError,
23
- findPreviewServerForProject,
24
- studioApiUrl
25
+ AmbiguousPreviewServerError
25
26
  } from "./chunk-DQBY7FRR.js";
26
27
  import {
27
28
  trackHistoryAction
28
- } from "./chunk-ZD3RDNZI.js";
29
- import "./chunk-IZ7L6V76.js";
29
+ } from "./chunk-H2SGM2V2.js";
30
+ import "./chunk-KZ3L3W4Q.js";
30
31
  import "./chunk-VWG7OQKU.js";
31
32
  import "./chunk-XBSPQ52S.js";
32
33
  import {
@@ -40,12 +41,12 @@ import "./chunk-ZTZA4UWZ.js";
40
41
  import "./chunk-EOOEC32M.js";
41
42
  import {
42
43
  withMeta
43
- } from "./chunk-35PWWBGZ.js";
44
+ } from "./chunk-YYEYOFHW.js";
44
45
  import "./chunk-K4WIOZFP.js";
45
46
  import "./chunk-XUXGIA7H.js";
46
47
  import "./chunk-WERLJGIC.js";
47
48
  import "./chunk-ISN5GRYI.js";
48
- import "./chunk-TCWMDCBX.js";
49
+ import "./chunk-IZIRIDJH.js";
49
50
  import "./chunk-EOVYQ3IG.js";
50
51
  import "./chunk-AMKC3AXA.js";
51
52
  import "./chunk-JYVGYKXG.js";
@@ -57,183 +58,9 @@ import "./chunk-M2WBOQ2Q.js";
57
58
 
58
59
  // src/commands/history.ts
59
60
  import { spawnSync } from "child_process";
60
- import { mkdirSync as mkdirSync2, mkdtempSync, rmSync as rmSync2, writeFileSync as writeFileSync2 } from "fs";
61
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "fs";
61
62
  import { tmpdir } from "os";
62
- import { dirname as dirname2, join as join2 } from "path";
63
-
64
- // src/utils/historyOwner.ts
65
- import { randomUUID } from "crypto";
66
- import { mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "fs";
67
63
  import { dirname, join } from "path";
68
- var historyDeps = {
69
- historyRoot: DEFAULT_HISTORY_ROOT,
70
- findServer: (projectDir) => findPreviewServerForProject(projectDir),
71
- /** A turn with no write for this long has ended, through a preview or not. */
72
- turnIdleMs: MAX_WINDOW_IDLE_MS,
73
- ownerWaitMs: void 0,
74
- now: () => Date.now()
75
- };
76
- var Refusal = class extends Error {
77
- };
78
- var turnFile = (dir) => join(dir, ".hyperframes", "history-turn.json");
79
- function readTurn(dir) {
80
- try {
81
- const turn = JSON.parse(readFileSync(turnFile(dir), "utf-8"));
82
- return typeof turn.lastWriteAt === "number" ? { ...turn, parts: turn.parts ?? [] } : null;
83
- } catch {
84
- return null;
85
- }
86
- }
87
- function writeTurn(dir, turn) {
88
- if (!turn) return rmSync(turnFile(dir), { force: true });
89
- mkdirSync(dirname(turnFile(dir)), { recursive: true });
90
- writeFileSync(turnFile(dir), JSON.stringify(turn));
91
- }
92
- var lastTurnsFile = (dir) => join(dir, ".hyperframes", "history-turns.json");
93
- function readLastTurns(dir) {
94
- try {
95
- const turns = JSON.parse(readFileSync(lastTurnsFile(dir), "utf-8"));
96
- return turns && typeof turns === "object" ? turns : {};
97
- } catch {
98
- return {};
99
- }
100
- }
101
- function lastTurnParts(dir, name) {
102
- return readLastTurns(dir)[name] ?? null;
103
- }
104
- var samePart = (a, b) => a.who.kind === b.who.kind && a.who.name === b.who.name && a.label === b.label && a.startedAt === b.startedAt;
105
- async function endTurn(owner, turn, dir) {
106
- const entry = await owner.end(turn.id);
107
- const cut = (await owner.list()).filter((other) => samePart(other, entry ?? turn));
108
- const own = entry ? [entry.id] : [];
109
- const parts = [.../* @__PURE__ */ new Set([...turn.parts, ...cut.map((part) => part.id), ...own])];
110
- const draft = `${lastTurnsFile(dir)}.${process.pid}.tmp`;
111
- mkdirSync(dirname(draft), { recursive: true });
112
- writeFileSync(draft, JSON.stringify({ ...readLastTurns(dir), [turn.who.name]: parts }));
113
- renameSync(draft, lastTurnsFile(dir));
114
- writeTurn(dir, null);
115
- return { entry, parts };
116
- }
117
- function previewOwner(route) {
118
- const call = async (path, body) => {
119
- const init = body && {
120
- method: "POST",
121
- headers: { "content-type": "application/json" },
122
- body: JSON.stringify(body)
123
- };
124
- const response = await fetch(route(path), init);
125
- if (response.ok) return response;
126
- const error = await response.json().catch(() => null);
127
- throw new Refusal(error?.error ?? `The preview answered ${response.status}.`);
128
- };
129
- const json = async (path, body) => (await call(path, body)).json();
130
- const list = async () => (await json("")).entries;
131
- return {
132
- via: "preview",
133
- list,
134
- peek: async (point) => (await json(`/peek/${encodeURIComponent(point)}`)).files,
135
- blob: async (hash) => Buffer.from(await (await call(`/blob/${hash}`)).arrayBuffer()),
136
- undo: (id, who, mode) => json("/undo", { entryId: id, who, mode }),
137
- restore: (point, who) => json("/restore", { point, who }),
138
- pin: async (id, pinned) => void await json("/pin", { entryId: id, pinned }),
139
- begin: async (who, label) => {
140
- const opened = await json("/window", { who, label, idleMs: historyDeps.turnIdleMs });
141
- return { id: opened.windowId, startedAt: opened.startedAt ?? historyDeps.now() };
142
- },
143
- // A preview restarted since begin committed the window on its way down.
144
- end: (id) => json(`/window/${id}/close`, {}).then((closed) => closed.entry).catch(async () => (await list()).find((entry) => entry.id === id) ?? null),
145
- close: async () => {
146
- }
147
- };
148
- }
149
- async function directOwner(projectDir, turn) {
150
- const history = await openProjectHistory({
151
- projectDir,
152
- historyRoot: historyDeps.historyRoot,
153
- now: () => historyDeps.now(),
154
- pruneGoneProjectsBudgetMs: 1e3,
155
- ownerWaitMs: historyDeps.ownerWaitMs,
156
- // A turn begun through a preview that has since stopped is still the agent's, until its idle limit.
157
- ...turn && {
158
- closedWindow: {
159
- id: turn.id,
160
- who: turn.who,
161
- label: turn.label,
162
- startedAt: turn.startedAt,
163
- lastWriteAt: turn.lastWriteAt,
164
- idleMs: historyDeps.turnIdleMs
165
- }
166
- }
167
- });
168
- return {
169
- via: "direct",
170
- list: async () => history.list(),
171
- peek: async (point) => history.peek(point),
172
- blob: (hash) => history.readBlob(hash),
173
- undo: (id, who, mode) => history.undo(id, { who, ...mode && { mode } }),
174
- restore: (point, who) => history.restore(point, who),
175
- pin: async (id, pinned) => history.pin(id, pinned),
176
- // Opening filed every earlier write; the turn's own writes are filed to it when the next open passes it.
177
- begin: async () => ({ id: randomUUID(), startedAt: historyDeps.now() }),
178
- end: async (id) => history.list().find((entry) => entry.id === id) ?? null,
179
- close: () => history.close()
180
- };
181
- }
182
- async function connect(projectDir, turn) {
183
- const server = await historyDeps.findServer(projectDir);
184
- if (server) {
185
- const route = (path) => studioApiUrl(server, `history${path}`);
186
- const status = await fetch(route("")).then(
187
- (response) => response.status,
188
- () => 404
189
- );
190
- if (status !== 404) return previewOwner(route);
191
- }
192
- return directOwner(projectDir, turn);
193
- }
194
- async function withOwner(dir, task) {
195
- const { dir: projectDir } = resolveProject(dir);
196
- const turn = readTurn(projectDir);
197
- const owner = await connect(projectDir, turn);
198
- try {
199
- return await task(owner, turn, projectDir);
200
- } finally {
201
- const direct = owner.via === "direct" && turn;
202
- let kept;
203
- try {
204
- kept = direct ? (await owner.list()).find((entry) => entry.id === turn.id) : void 0;
205
- } finally {
206
- await owner.close();
207
- }
208
- if (direct && readTurn(projectDir)?.id === turn.id) {
209
- const lastWriteAt = kept ? kept.endedAt : turn.lastWriteAt;
210
- const parts = kept ? [...turn.parts, kept.id] : turn.parts;
211
- writeTurn(projectDir, { ...turn, via: "direct", id: randomUUID(), lastWriteAt, parts });
212
- }
213
- }
214
- }
215
- async function withReader(dir, task) {
216
- try {
217
- return await withOwner(dir, (owner) => task(owner));
218
- } catch (error) {
219
- if (!(error instanceof HistoryBusyError)) throw error;
220
- }
221
- const view = readProjectHistory({
222
- projectDir: resolveProject(dir).dir,
223
- historyRoot: historyDeps.historyRoot
224
- });
225
- return task({
226
- via: "direct",
227
- list: async () => view.list(),
228
- peek: async (point) => view.peek(point),
229
- // The owner may have pruned a blob since its log was read.
230
- blob: (hash) => view.readBlob(hash).catch((error) => {
231
- throw error.code === "ENOENT" ? new Refusal("That point is no longer kept") : error;
232
- })
233
- });
234
- }
235
-
236
- // src/commands/history.ts
237
64
  var examples = [
238
65
  [
239
66
  "What changed since your last turn, and who changed it",
@@ -260,6 +87,25 @@ function lastIndex(items, match) {
260
87
  for (let index = items.length - 1; index >= 0; index -= 1) if (match(items[index])) return index;
261
88
  return -1;
262
89
  }
90
+ async function latestWrite(owner, turn) {
91
+ const entries = await owner.list();
92
+ return entries.reduce((latest, entry) => {
93
+ const same = entry.id === turn.id || turn.parts.includes(entry.id) || entry.who.kind === turn.who.kind && entry.who.name === turn.who.name && entry.label === turn.label && entry.startedAt === turn.startedAt;
94
+ return same ? Math.max(latest, entry.endedAt) : latest;
95
+ }, turn.lastWriteAt);
96
+ }
97
+ async function releaseOpenTurn(owner, turn, who, exclusive, projectDir) {
98
+ if (!turn) return;
99
+ if (owner.via !== "direct") {
100
+ if (!exclusive || turn.who.name === who.name) await endTurn(owner, turn, projectDir);
101
+ return;
102
+ }
103
+ const latest = await latestWrite(owner, turn);
104
+ const live = historyDeps.now() - latest <= historyDeps.turnIdleMs;
105
+ if (exclusive && live && turn.who.name !== who.name)
106
+ throw new Refusal(`${turn.who.name}'s turn is open; it has to end before yours begins`);
107
+ await endTurn(owner, turn, projectDir);
108
+ }
263
109
  function entryOf(entries, ref) {
264
110
  const found = entries.filter((entry) => entry.id.startsWith(ref));
265
111
  if (found.length === 1) return found[0];
@@ -297,6 +143,12 @@ function ago(at) {
297
143
  if (seconds < 86400) return `${Math.round(seconds / 3600)}h ago`;
298
144
  return `${Math.round(seconds / 86400)}d ago`;
299
145
  }
146
+ function endedTurnText(entry, parts) {
147
+ const earlier = parts.length - (entry ? 1 : 0);
148
+ const text = entry ? line(entry) : earlier ? "Nothing changed since this turn's last command." : "Nothing changed in this turn.";
149
+ return earlier ? `${text}
150
+ (+${earlier} earlier part${earlier > 1 ? "s" : ""})` : text;
151
+ }
300
152
  function line(entry) {
301
153
  const paths = entry.files.map((file) => file.path);
302
154
  const files = paths.slice(0, 2).join(", ") + (paths.length > 2 ? ` +${paths.length - 2}` : "");
@@ -318,7 +170,7 @@ function print(json, data, text) {
318
170
  console.log(json ? JSON.stringify(withMeta(data), null, 2) : text);
319
171
  }
320
172
  async function textDiff(reader, entry) {
321
- const work = mkdtempSync(join2(tmpdir(), "hf-history-diff-"));
173
+ const work = mkdtempSync(join(tmpdir(), "hf-history-diff-"));
322
174
  try {
323
175
  const out = [];
324
176
  for (const file of entry.files) {
@@ -330,9 +182,9 @@ async function textDiff(reader, entry) {
330
182
  continue;
331
183
  }
332
184
  const [a, b] = ["a", "b"].map((side, index) => {
333
- const path = join2(side, file.path);
334
- mkdirSync2(dirname2(join2(work, path)), { recursive: true });
335
- writeFileSync2(join2(work, path), sides[index]);
185
+ const path = join(side, file.path);
186
+ mkdirSync(dirname(join(work, path)), { recursive: true });
187
+ writeFileSync(join(work, path), sides[index]);
336
188
  return path;
337
189
  });
338
190
  const diff = spawnSync("git", ["diff", "--no-index", "--no-color", "--no-prefix", a, b], {
@@ -344,7 +196,7 @@ async function textDiff(reader, entry) {
344
196
  }
345
197
  return out.join("\n");
346
198
  } finally {
347
- rmSync2(work, { recursive: true, force: true });
199
+ rmSync(work, { recursive: true, force: true });
348
200
  }
349
201
  }
350
202
  function conflictText(entry, newer, files, again) {
@@ -537,11 +389,23 @@ ${diff ?? marks.join("\n")}`
537
389
  begin: () => sub(
538
390
  "begin",
539
391
  "Start a turn: your writes until `end` become one entry under your name",
540
- { who: { type: "string", required: true }, label: { type: "string", required: true } },
392
+ {
393
+ who: { type: "string", required: true },
394
+ label: { type: "string", required: true },
395
+ exclusive: {
396
+ type: "boolean",
397
+ default: false,
398
+ description: "Refuse while another agent's turn is open, instead of ending it"
399
+ }
400
+ },
541
401
  (args) => withOwner2("begin", args.dir, async (owner, turn, projectDir) => {
542
- if (turn) await endTurn(owner, turn, projectDir);
543
402
  const who = whoOf(args.who);
544
- const { id, startedAt } = await owner.begin(who, args.label);
403
+ await releaseOpenTurn(owner, turn, who, args.exclusive, projectDir);
404
+ const { id, startedAt } = await owner.begin(
405
+ who,
406
+ args.label,
407
+ args.exclusive && owner.via === "preview"
408
+ );
545
409
  writeTurn(projectDir, {
546
410
  via: owner.via,
547
411
  id,
@@ -557,17 +421,25 @@ ${diff ?? marks.join("\n")}`
557
421
  end: () => sub(
558
422
  "end",
559
423
  "End your turn and print its entry",
560
- {},
424
+ {
425
+ who: { type: "string", description: "Refuse unless the open turn is this agent's" },
426
+ "if-open": {
427
+ type: "boolean",
428
+ default: false,
429
+ description: "Succeed with no entry when no turn is open"
430
+ }
431
+ },
561
432
  (args) => withOwner2("end", args.dir, async (owner, turn, projectDir) => {
433
+ if (!turn && args.ifOpen)
434
+ return print(args.json, { entry: null, parts: [] }, "No turn is open.");
562
435
  if (!turn) throw new Refusal("No turn is open; start one with history begin");
436
+ if (args.who !== void 0 && turn.who.name !== args.who)
437
+ throw new Refusal(`The open turn is ${turn.who.name}'s, not ${args.who}'s`);
563
438
  const { entry, parts } = await endTurn(owner, turn, projectDir);
564
- const earlier = parts.length - (entry ? 1 : 0);
565
- const text = entry ? line(entry) : earlier ? "Nothing changed since this turn's last command." : "Nothing changed in this turn.";
566
439
  print(
567
440
  args.json,
568
441
  { entry: entry && publicEntry(entry), parts },
569
- earlier ? `${text}
570
- (+${earlier} earlier part${earlier > 1 ? "s" : ""})` : text
442
+ endedTurnText(entry, parts)
571
443
  );
572
444
  })
573
445
  )