hyperframes 0.8.190 → 0.8.192

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 (222) hide show
  1. package/dist/{add-DBKN5H7H.js → add-TZU2UW7A.js} +17 -17
  2. package/dist/{animatedGifPrep-YVBKKLQY.js → animatedGifPrep-NLAXC3VV.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-2OHQKUMQ.js → asset-JAJXA6LB.js} +2 -2
  6. package/dist/{assetCataloger-O3QAUWIK.js → assetCataloger-4WTX3J4I.js} +13 -12
  7. package/dist/{audio-IR3JGCMM.js → audio-XLWC7JKS.js} +22 -21
  8. package/dist/{auth-J6TAJLGD.js → auth-5K6X3NPJ.js} +4 -4
  9. package/dist/{autoUpdate-D7BJJUT2.js → autoUpdate-RNV7SKGB.js} +4 -4
  10. package/dist/{backgroundChecks-AILHY2YZ.js → backgroundChecks-QXLVZVGX.js} +5 -5
  11. package/dist/backgroundChecksWorker.js +5 -5
  12. package/dist/{batchRender-QZKFVWEI.js → batchRender-THKSPDZR.js} +14 -7
  13. package/dist/{beats-6LOEKZPB.js → beats-K7CGCFVL.js} +53 -15
  14. package/dist/{benchmark-RJMHI3YW.js → benchmark-PHRDIXNL.js} +18 -14
  15. package/dist/{browser-Q3Q36FE3.js → browser-GN6R5ZSK.js} +7 -7
  16. package/dist/{bundleWithLocalizedFonts-RWHFMSFL.js → bundleWithLocalizedFonts-C325UNR4.js} +3 -3
  17. package/dist/{capture-2PNTGVYV.js → capture-6UBQFHZQ.js} +76 -68
  18. package/dist/{capture-FO3ZZCT4.js → capture-BZ7APOGQ.js} +3 -3
  19. package/dist/{captureCompositionFrame-WTMLWVEJ.js → captureCompositionFrame-VORSCTWC.js} +19 -16
  20. package/dist/{catalog-LUZYPUYT.js → catalog-PHU2RUZ3.js} +18 -18
  21. package/dist/{catch-up-TUTLUTFP.js → catch-up-HCNRM46J.js} +7 -7
  22. package/dist/{check-K2TBTJZS.js → check-TJ5ZLB4I.js} +43 -42
  23. package/dist/{checkBrowser-JT7CXDT6.js → checkBrowser-DWP7ZXJ7.js} +38 -37
  24. package/dist/{chunk-STJ2ANMF.js → chunk-2HP5GIQ3.js} +3 -3
  25. package/dist/{chunk-L34DPWY4.js → chunk-2J3NA3OB.js} +13 -13
  26. package/dist/{chunk-B2A56S5C.js → chunk-2MCXIY4B.js} +13 -10
  27. package/dist/{chunk-DCAI5DBR.js → chunk-2ST4WAFY.js} +9 -1
  28. package/dist/{chunk-TSFA2Y5C.js → chunk-2VXY3PEF.js} +99 -69
  29. package/dist/{chunk-AYFF3GX6.js → chunk-32NB4VMH.js} +1 -1
  30. package/dist/{chunk-IXLUTE6N.js → chunk-3422KMTD.js} +5 -1
  31. package/dist/{chunk-JB7LML5B.js → chunk-3CXIX6XS.js} +68 -7
  32. package/dist/{chunk-F6DNM676.js → chunk-3FV5BVWS.js} +2 -2
  33. package/dist/{chunk-OTQXYTQZ.js → chunk-4E75LHAL.js} +23 -3
  34. package/dist/{chunk-TMBUBLZB.js → chunk-4HCJOFMB.js} +166 -46
  35. package/dist/{chunk-UZ7RJDEC.js → chunk-5IPKQHOL.js} +17 -6
  36. package/dist/{chunk-WBUO6WH6.js → chunk-5TRFLZ5Z.js} +2 -2
  37. package/dist/{chunk-HRPWRZGF.js → chunk-6N65ZMC5.js} +1 -1
  38. package/dist/{chunk-XUXGIA7H.js → chunk-6NLPPKBO.js} +1 -2
  39. package/dist/{chunk-3QLT727N.js → chunk-6WNLQI63.js} +4 -4
  40. package/dist/{chunk-XNLYMHX2.js → chunk-6XVKMBUA.js} +9 -6
  41. package/dist/{chunk-JLSXXMRU.js → chunk-7JJMT6LN.js} +1 -1
  42. package/dist/{chunk-7JHTNUF2.js → chunk-7LLRMYP6.js} +2 -2
  43. package/dist/{chunk-BT64TTSE.js → chunk-7RSY7SZN.js} +2 -2
  44. package/dist/{chunk-DX7VEUBO.js → chunk-7UZC4N62.js} +1 -1
  45. package/dist/{chunk-YT5VLUHM.js → chunk-A4OI5ZNX.js} +1 -1
  46. package/dist/{chunk-TSQAPPRS.js → chunk-AEXVVABM.js} +83 -45
  47. package/dist/{chunk-Y5L5I4US.js → chunk-AMZJFCOX.js} +8 -8
  48. package/dist/{chunk-WCT6KGGT.js → chunk-AR46ND2Q.js} +1 -1
  49. package/dist/chunk-B2XLXD7V.js +3897 -0
  50. package/dist/{chunk-KNQQZRB2.js → chunk-BEOK6F26.js} +2 -2
  51. package/dist/{chunk-76ITJYXX.js → chunk-BPKLUHFT.js} +7 -7
  52. package/dist/{chunk-OOAVKK2W.js → chunk-BV6YE455.js} +2 -2
  53. package/dist/{chunk-XGHHVYC7.js → chunk-BY6OQ6XP.js} +2 -2
  54. package/dist/{chunk-JQYJXUJW.js → chunk-C6KE4AFW.js} +1 -1
  55. package/dist/{chunk-TMK4Q7JA.js → chunk-CFUCHO4T.js} +20 -5
  56. package/dist/{chunk-FANFO5HI.js → chunk-CXRZBWSH.js} +11 -11
  57. package/dist/chunk-CZGHFATT.js +31 -0
  58. package/dist/{chunk-CYBXXSC4.js → chunk-DIKAPMMF.js} +2 -2
  59. package/dist/{chunk-7L37AB57.js → chunk-E3P3LJG6.js} +9 -9
  60. package/dist/{chunk-EU5HTY3E.js → chunk-E5V6WEMK.js} +58 -23
  61. package/dist/{chunk-HJZ5CPZA.js → chunk-EKGGSAWR.js} +6 -5
  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-EI7FP7F3.js → chunk-FBVUAH7N.js} +12 -2
  65. package/dist/{chunk-TTZTGXKG.js → chunk-GANST5K3.js} +2 -2
  66. package/dist/{chunk-EQF6TVWB.js → chunk-IMSI7IFW.js} +65 -29
  67. package/dist/{chunk-W64L7IFS.js → chunk-IW5G323T.js} +1 -1
  68. package/dist/{chunk-RBGNU7VD.js → chunk-J2ASTCU6.js} +2 -2
  69. package/dist/{chunk-SUSSMCWL.js → chunk-J2BSUF6X.js} +1 -1
  70. package/dist/{chunk-GGVGOY6M.js → chunk-JCDYDF54.js} +2 -2
  71. package/dist/{chunk-EPOYPP36.js → chunk-K2AKVYNR.js} +2 -2
  72. package/dist/{chunk-XBGEWNGQ.js → chunk-KZOZN4PI.js} +4 -4
  73. package/dist/{chunk-E7DXKMKU.js → chunk-L2YGSAOL.js} +3 -3
  74. package/dist/{chunk-2FFOLLU2.js → chunk-LOKCBZYF.js} +3 -3
  75. package/dist/{chunk-56IDMP37.js → chunk-MEE4NTPZ.js} +2 -2
  76. package/dist/{chunk-56IOFIYB.js → chunk-MGBUWPXX.js} +2 -2
  77. package/dist/{chunk-K4664CDS.js → chunk-MVIJTXN5.js} +35 -14
  78. package/dist/{chunk-S2IEO6TH.js → chunk-ODBYZIOH.js} +28 -16
  79. package/dist/{chunk-45U3KY7Z.js → chunk-OQL4AJ4X.js} +6 -6
  80. package/dist/{chunk-5C7R55BJ.js → chunk-P2I4RLJE.js} +1 -1
  81. package/dist/{chunk-S7C6EM7N.js → chunk-PFRG5P32.js} +1 -1
  82. package/dist/{chunk-RUOG4VB7.js → chunk-PKZ7RK5N.js} +5 -4
  83. package/dist/{chunk-LLFQA7XF.js → chunk-QFPBRZJD.js} +1 -1
  84. package/dist/{chunk-CWVSJA52.js → chunk-QWLES6YV.js} +3 -3
  85. package/dist/{chunk-OAPYPSEB.js → chunk-QX4TB4NH.js} +292 -79
  86. package/dist/{chunk-BWPY64WA.js → chunk-R2U2G4OS.js} +1 -1
  87. package/dist/{chunk-46HEFGXJ.js → chunk-REUL2KH2.js} +1 -1
  88. package/dist/{chunk-R4QASDTN.js → chunk-RHYOWDI6.js} +2 -2
  89. package/dist/{chunk-DYAPHNV6.js → chunk-RWGASWT7.js} +1 -1
  90. package/dist/chunk-RXATE6FZ.js +385 -0
  91. package/dist/{chunk-CWYS2UNQ.js → chunk-SBBQFPCJ.js} +1 -1
  92. package/dist/{chunk-RDHEG7RX.js → chunk-SK7TR7BL.js} +4 -4
  93. package/dist/{chunk-KNU5COPB.js → chunk-T2EUWCJE.js} +1 -1
  94. package/dist/{chunk-6HYHHMX3.js → chunk-T6O5OLN2.js} +3 -3
  95. package/dist/{chunk-FVD44EQX.js → chunk-ULTKB5FC.js} +65 -23
  96. package/dist/{chunk-B7JFAXDP.js → chunk-VNPADTDD.js} +3 -3
  97. package/dist/{chunk-FUHI34T4.js → chunk-VOM2HLUI.js} +4 -4
  98. package/dist/{chunk-IARWN467.js → chunk-VRAXIQ6I.js} +2 -2
  99. package/dist/{chunk-NAUKCKCJ.js → chunk-W24SZ5FL.js} +4 -4
  100. package/dist/{chunk-ZFFKWHXN.js → chunk-WOKVXK4J.js} +1 -1
  101. package/dist/{chunk-WLG4OYH7.js → chunk-XF77MK3J.js} +1 -1
  102. package/dist/{chunk-DRTIIAIZ.js → chunk-XX2PA4L3.js} +2 -2
  103. package/dist/{chunk-A5YHWTSP.js → chunk-YMQQXPD5.js} +2 -2
  104. package/dist/{chunk-KUMUK6QS.js → chunk-YWRQHRDY.js} +17 -12
  105. package/dist/{chunk-EUUHVDMN.js → chunk-ZEMDV6W2.js} +29 -59
  106. package/dist/{clean-UVTWBPXK.js → clean-2RNCTDBT.js} +40 -27
  107. package/dist/cli.js +69 -67
  108. package/dist/{cloud-M42IPKFD.js → cloud-NFIKESNZ.js} +4 -4
  109. package/dist/{cloudrun-CTNX64R6.js → cloudrun-7224BCX3.js} +9 -9
  110. package/dist/commands/contrast-audit.browser.js +1 -1
  111. package/dist/commands/layout-audit.browser.js +64 -3
  112. package/dist/{compare-MQI7TG5M.js → compare-HL44MXVX.js} +80 -48
  113. package/dist/{compiler-EJE3HLCS.js → compiler-WF5QTXV7.js} +8 -7
  114. package/dist/{component-QSYOSFVV.js → component-ZBZXSJBR.js} +3 -3
  115. package/dist/{compositions-ITDFE7K4.js → compositions-76P7LDDX.js} +19 -17
  116. package/dist/{contactSheet-CAGMKI3E.js → contactSheet-43ISAESM.js} +2 -2
  117. package/dist/{delete-NTGTENKJ.js → delete-4YZBYOHJ.js} +7 -7
  118. package/dist/{deploy-AOJOXEYX.js → deploy-UGUUGYLF.js} +1 -1
  119. package/dist/{deterministicFonts-EGAAE7QL.js → deterministicFonts-RO2TCMLZ.js} +3 -3
  120. package/dist/{dist-NHW2JQCA.js → dist-5KKCRFPT.js} +5 -5
  121. package/dist/{dist-JH32CBQL.js → dist-QQ26RUDV.js} +5 -4
  122. package/dist/docs/rendering.md +2 -2
  123. package/dist/{doctor-Q6DAYVSQ.js → doctor-GGVUK4NB.js} +20 -19
  124. package/dist/{events-BQIBYPCF.js → events-OXPTHVDB.js} +4 -4
  125. package/dist/{events-PV3CDO4A.js → events-V2VU4J3B.js} +5 -5
  126. package/dist/{feedback-BZH26JQE.js → feedback-HFZ5SCUK.js} +16 -16
  127. package/dist/{ffmpeg-KU7RNT3U.js → ffmpeg-3VHY7GO3.js} +13 -12
  128. package/dist/{figma-PBGZUEIL.js → figma-7SEZTLBJ.js} +3 -3
  129. package/dist/fontLocalizeCli.js +14 -13
  130. package/dist/{get-MM2JZ5ET.js → get-Y2S2PXCM.js} +7 -7
  131. package/dist/{gpuPolicy-DQE2CD5T.js → gpuPolicy-UHPOWRV5.js} +11 -10
  132. package/dist/{grade-compare-YTDQ7YXW.js → grade-compare-4VTXSQM5.js} +38 -37
  133. package/dist/{gsapParserAcorn-SKODXC2N.js → gsapParserAcorn-OOTY2MVN.js} +2 -2
  134. package/dist/{help-M4B2DN7E.js → help-HXNOACHI.js} +1 -1
  135. package/dist/{history-ZW4UYKAJ.js → history-XDJUI4LC.js} +39 -16
  136. package/dist/hyperframe.manifest.json +1 -1
  137. package/dist/hyperframe.runtime.iife.js +64 -64
  138. package/dist/hyperframes-player.global.js +3 -3
  139. package/dist/hyperframes-slideshow.global.js +1 -1
  140. package/dist/{info-L7LQAXLK.js → info-KYRI3EZV.js} +56 -22
  141. package/dist/{init-HTSQ535A.js → init-IL7EWMT5.js} +38 -45
  142. package/dist/{inspect-EWF2THRR.js → inspect-TBNH23UC.js} +36 -35
  143. package/dist/{installer-PQKH2S7C.js → installer-O2YMFSI4.js} +8 -8
  144. package/dist/{keyframes-X2QKJ4DP.js → keyframes-4GF62KAJ.js} +13 -14
  145. package/dist/{lambda-BURM66GP.js → lambda-JFL6M4XZ.js} +12 -12
  146. package/dist/{layout-3Z3SJGZZ.js → layout-7MAEFR65.js} +36 -35
  147. package/dist/{lint-OMNZ2K5J.js → lint-4AYHKYAM.js} +23 -16
  148. package/dist/{lintProject-XM3DLUKG.js → lintProject-52SLJPRC.js} +5 -4
  149. package/dist/{list-5ZSQEH6N.js → list-3DP3D3MW.js} +7 -7
  150. package/dist/{login-YNCQPHLA.js → login-T54WQYRQ.js} +7 -7
  151. package/dist/{logout-DDC4QLVK.js → logout-JYFWWUGK.js} +3 -3
  152. package/dist/{manager-UHWEKPXC.js → manager-MZIJY73J.js} +3 -3
  153. package/dist/{manager-N6XXRQN3.js → manager-QROK2IH3.js} +14 -13
  154. package/dist/{media-treatment-EOKBRJPY.js → media-treatment-4CXF7MSG.js} +20 -19
  155. package/dist/{models-6T4CCKUV.js → models-IS3I6JKU.js} +18 -17
  156. package/dist/{motionShot-KXKMYZ3A.js → motionShot-DVYJZOTQ.js} +21 -20
  157. package/dist/{normalize-3AYFSN2F.js → normalize-FASIPBUM.js} +1 -1
  158. package/dist/{normalize-audio-VWB7RHHA.js → normalize-audio-4527JIK4.js} +12 -8
  159. package/dist/{open-32SQCNUP.js → open-5JE46SAX.js} +18 -18
  160. package/dist/{parakeetRunner-BXW2WX6Q.js → parakeetRunner-7JIJGJJ7.js} +20 -19
  161. package/dist/{pipeline-V5ONFRCY.js → pipeline-YEN3WFD2.js} +15 -14
  162. package/dist/{play-BBL262JE.js → play-WFX67I7M.js} +27 -26
  163. package/dist/{policies-MBWGLMWB.js → policies-GHVXA5PE.js} +1 -1
  164. package/dist/{preflight-LCNGQFNY.js → preflight-D377HVUZ.js} +15 -14
  165. package/dist/{present-RY4HO4ZQ.js → present-XTSEKAC7.js} +24 -23
  166. package/dist/{preview-BLLPCCLG.js → preview-5XH7EK6O.js} +28 -26
  167. package/dist/{producer-QG4AQ35S.js → producer-TFFYF4ZM.js} +1 -1
  168. package/dist/{projectConfig-LN3NR5OM.js → projectConfig-6YUJHMCL.js} +10 -10
  169. package/dist/{publication-TXMCS4KM.js → publication-JK33Y55E.js} +5 -5
  170. package/dist/{publish-57VURD7Z.js → publish-JHDGXWXU.js} +18 -17
  171. package/dist/{refresh-RXTOPRBB.js → refresh-USSFPJAU.js} +3 -3
  172. package/dist/{remove-background-VEWVIO3A.js → remove-background-P44MYAPJ.js} +16 -15
  173. package/dist/{render-SP7WAUB4.js → render-HJ34EGMN.js} +10 -9
  174. package/dist/{render-XMN3NJIQ.js → render-RBINWWP5.js} +43 -42
  175. package/dist/{render-4E7QDVOI.js → render-RJ3I4E3A.js} +26 -25
  176. package/dist/{render-batch-7ULP5RIJ.js → render-batch-3D6XQYUC.js} +11 -10
  177. package/dist/renderSetupWorker.js +9 -8
  178. package/dist/{resolver-D3XERO6U.js → resolver-HCLTFZUW.js} +7 -7
  179. package/dist/{screenshotCapture-UBY6TT75.js → screenshotCapture-I5EDCITF.js} +6 -3
  180. package/dist/{sherpa-5B5G426W.js → sherpa-IPOUJM6Q.js} +19 -18
  181. package/dist/{sites-5PWHAMEG.js → sites-Q2S3DZY4.js} +2 -1
  182. package/dist/skills/hyperframes/references/captions.md +1 -1
  183. package/dist/skills/hyperframes/references/skill-lifecycle.md +8 -4
  184. package/dist/skills/hyperframes-cli/references/cloudrun.md +1 -1
  185. package/dist/skills/hyperframes-cli/references/init-and-scaffold.md +1 -1
  186. package/dist/skills/hyperframes-cli/references/lambda.md +1 -1
  187. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +2 -2
  188. package/dist/skills/hyperframes-cli/references/preview-render.md +1 -1
  189. package/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +0 -8
  190. package/dist/skills/media-use/audio/references/transcribe.md +2 -2
  191. package/dist/skills/media-use/references/audio.md +1 -1
  192. package/dist/{skills-RXHRF7O7.js → skills-P67QEERC.js} +13 -75
  193. package/dist/{skillsUpdateCheck-JOTDZJAE.js → skillsUpdateCheck-IFMLRVIF.js} +5 -5
  194. package/dist/{slideshow-YTWATJRT.js → slideshow-SJGK4RQS.js} +1 -1
  195. package/dist/{snapshot-DN4MP4VN.js → snapshot-4YM4NNWJ.js} +66 -48
  196. package/dist/{src-W6Y5ZYRQ.js → src-DCD3YMXX.js} +13 -12
  197. package/dist/{src-XSDYRKLG.js → src-SSV66L3F.js} +14 -9
  198. package/dist/{staticProjectServer-JMFGTPMX.js → staticProjectServer-C7PPGLEQ.js} +22 -21
  199. package/dist/{status-CM7IQTU2.js → status-H5WLKQDS.js} +3 -3
  200. package/dist/studio/assets/{hyperframes-player-0HXJPmYC.js → hyperframes-player-ChN3cOr0.js} +3 -3
  201. package/dist/studio/assets/{index-DsSfhjUS.js → index-BYbFcRR0.js} +1 -1
  202. package/dist/studio/assets/{index-BYw97F07.js → index-CHu83hHM.js} +126 -125
  203. package/dist/studio/assets/{index-B3vk3hfU.css → index-CYbvOVp-.css} +1 -1
  204. package/dist/studio/index.html +2 -2
  205. package/dist/{studio-api-SZ4OMFPN.js → studio-api-6YZ7PIQR.js} +17 -14
  206. package/dist/{studioServer-LWO33H7D.js → studioServer-EWHSE4GC.js} +60 -59
  207. package/dist/{telemetry-QG5AANZ4.js → telemetry-4K6CPMNT.js} +2 -2
  208. package/dist/{telemetry-K3AFDKOP.js → telemetry-GGLBHZRZ.js} +5 -5
  209. package/dist/{timeline-NYQOAQDH.js → timeline-NKHQJXJ2.js} +65 -43
  210. package/dist/{tokens-K7YWUVOK.js → tokens-FWNNDJ6R.js} +2 -2
  211. package/dist/{transcribe-QAUMODXM.js → transcribe-TRPKXZ7L.js} +27 -26
  212. package/dist/{transcribe-ANPUQDZD.js → transcribe-VD2TMMC2.js} +17 -16
  213. package/dist/{tts-A2WILYGN.js → tts-5I2AJNLM.js} +1 -1
  214. package/dist/{updateCheck-RNR4HMDI.js → updateCheck-CUPS6LU3.js} +4 -4
  215. package/dist/{upgrade-MKUGZZPA.js → upgrade-23XO6MEX.js} +4 -4
  216. package/dist/{urlDownloader-5USPXLCS.js → urlDownloader-YOAOONCK.js} +10 -9
  217. package/dist/{validate-OJHPDLC5.js → validate-BWIW24G5.js} +30 -29
  218. package/dist/{video-BCKRR6LU.js → video-XRXJS4GC.js} +12 -11
  219. package/dist/warmCheck.js +43 -42
  220. package/package.json +2 -1
  221. package/dist/chunk-DIV37NUE.js +0 -3896
  222. package/dist/chunk-I5JRXMCV.js +0 -6077
@@ -20,7 +20,7 @@ import {
20
20
  } from "./chunk-EHSBBBR2.js";
21
21
  import {
22
22
  normalizeErrorMessage
23
- } from "./chunk-KNU5COPB.js";
23
+ } from "./chunk-T2EUWCJE.js";
24
24
  import "./chunk-M2WBOQ2Q.js";
25
25
 
26
26
  // src/capture/screenshotCapture.ts
@@ -44,7 +44,8 @@ async function captureFullPagePlate(page, screenshotsDir, budget = {}) {
44
44
  const p = getComputedStyle(el).position;
45
45
  if (p === 'fixed' || p === 'sticky') {
46
46
  el.setAttribute('data-hf-plate-position', el.style.position || '');
47
- el.style.position = 'static';
47
+ el.setAttribute('data-hf-plate-position-priority', el.style.getPropertyPriority('position'));
48
+ el.style.setProperty('position', 'static', 'important');
48
49
  }
49
50
  })`
50
51
  );
@@ -65,8 +66,10 @@ async function captureFullPagePlate(page, screenshotsDir, budget = {}) {
65
66
  try {
66
67
  await page.evaluate(
67
68
  `document.querySelectorAll('[data-hf-plate-position]').forEach((el) => {
68
- el.style.position = el.getAttribute('data-hf-plate-position');
69
+ el.style.setProperty('position', el.getAttribute('data-hf-plate-position') || '',
70
+ el.getAttribute('data-hf-plate-position-priority') || '');
69
71
  el.removeAttribute('data-hf-plate-position');
72
+ el.removeAttribute('data-hf-plate-position-priority');
70
73
  })`
71
74
  );
72
75
  } catch {
@@ -17,45 +17,46 @@ import {
17
17
  sherpaRuntimeLoadError,
18
18
  sherpaUnsupportedReason,
19
19
  transcribeWithSherpa
20
- } from "./chunk-FUHI34T4.js";
20
+ } from "./chunk-VOM2HLUI.js";
21
21
  import "./chunk-CZUAX3BV.js";
22
- import "./chunk-QH3T4WI2.js";
22
+ import "./chunk-EXAX37XR.js";
23
23
  import "./chunk-6BEFEWFB.js";
24
- import "./chunk-2FFOLLU2.js";
25
- import "./chunk-RBGNU7VD.js";
26
- import "./chunk-S7C6EM7N.js";
24
+ import "./chunk-LOKCBZYF.js";
25
+ import "./chunk-J2ASTCU6.js";
26
+ import "./chunk-PFRG5P32.js";
27
27
  import "./chunk-WQ6ZXHFQ.js";
28
- import "./chunk-IARWN467.js";
28
+ import "./chunk-VRAXIQ6I.js";
29
29
  import "./chunk-EOVYQ3IG.js";
30
- import "./chunk-OAPYPSEB.js";
30
+ import "./chunk-QX4TB4NH.js";
31
31
  import "./chunk-IZCW2NKT.js";
32
- import "./chunk-56IOFIYB.js";
32
+ import "./chunk-MGBUWPXX.js";
33
33
  import "./chunk-RQVDTPGD.js";
34
- import "./chunk-TSQAPPRS.js";
35
- import "./chunk-DIV37NUE.js";
34
+ import "./chunk-AEXVVABM.js";
35
+ import "./chunk-B2XLXD7V.js";
36
36
  import "./chunk-VC76R6W2.js";
37
37
  import "./chunk-X7HBSTCZ.js";
38
- import "./chunk-B2A56S5C.js";
38
+ import "./chunk-2MCXIY4B.js";
39
39
  import "./chunk-OFQWTKPW.js";
40
40
  import "./chunk-DPVXBVLL.js";
41
41
  import "./chunk-3GXQPCJC.js";
42
42
  import "./chunk-634HSJ3J.js";
43
43
  import "./chunk-FXMKHHPO.js";
44
- import "./chunk-W64L7IFS.js";
45
- import "./chunk-DYAPHNV6.js";
44
+ import "./chunk-IW5G323T.js";
45
+ import "./chunk-RWGASWT7.js";
46
46
  import "./chunk-XT6MXC7A.js";
47
47
  import "./chunk-4UMPIPCQ.js";
48
- import "./chunk-TSFA2Y5C.js";
48
+ import "./chunk-2VXY3PEF.js";
49
49
  import "./chunk-VAS6HQX3.js";
50
50
  import "./chunk-6BNTGNGD.js";
51
- import "./chunk-RUOG4VB7.js";
51
+ import "./chunk-CZGHFATT.js";
52
+ import "./chunk-PKZ7RK5N.js";
52
53
  import "./chunk-MMQ52NIZ.js";
53
54
  import "./chunk-BSQ7XANM.js";
54
55
  import "./chunk-SDYDNHEE.js";
55
- import "./chunk-IXLUTE6N.js";
56
- import "./chunk-I5JRXMCV.js";
56
+ import "./chunk-3422KMTD.js";
57
+ import "./chunk-RXATE6FZ.js";
57
58
  import "./chunk-W2LGJSEN.js";
58
- import "./chunk-KNU5COPB.js";
59
+ import "./chunk-T2EUWCJE.js";
59
60
  import "./chunk-JZIEZCQM.js";
60
61
  import "./chunk-UOFAE5RF.js";
61
62
  import "./chunk-IR35BCLK.js";
@@ -28,7 +28,8 @@ async function runSitesCreate(args) {
28
28
  projectDir,
29
29
  bucketName: stack.bucketName,
30
30
  region: stack.region,
31
- siteId: args.siteId
31
+ siteId: args.siteId,
32
+ onNotice: (message) => console.error(c.dim(message))
32
33
  });
33
34
  if (args.json) {
34
35
  console.log(JSON.stringify(handle, null, 2));
@@ -3,7 +3,7 @@
3
3
  ## Words and timings
4
4
 
5
5
  - `npx hyperframes transcribe <file> --json` and a HeyGen voiceover (`/media-use`) give every word's start and end. Work from those as `[{ "id": "w0", "text": "Hello", "start": 0.0, "end": 0.5 }, …]`.
6
- - Local transcription defaults to `small.en`, which **translates** non-English speech into English. Pass the model: `npx hyperframes transcribe <file> --model small.en` for English, `--model small --language <code>` otherwise, `--model medium.en` for speech over music. It writes `assets/transcript.json` (its JSON names the path) and overwrites it on the next run; `--to srt` or `--to vtt` writes a sidecar.
6
+ - `npx hyperframes transcribe` defaults to the `small.en` whisper model, which **translates** non-English speech into English. Pass the model: `npx hyperframes transcribe <file> --model small.en` for English, `--model small --language <code>` otherwise, `--model medium.en` for speech over music. It writes `assets/transcript.json` (its JSON names the path) and overwrites it on the next run; `--to srt` or `--to vtt` writes a sidecar.
7
7
  - For Chinese, Japanese and other unspaced scripts, local transcription returns a whole sentence as one "word", sometimes in the other script (Traditional for Simplified speech). Split each segment's text into short phrases and spread its time across them by character count; check the characters against what is said.
8
8
  - Whisper invents "Thank you." over silence and repeats lines over a silent tail: drop words that start inside a final silence (`silencedetect=noise=-35dB:d=0.6`; real speech sits around −16 to −26 dB).
9
9
  - Never put two words in one timed entry, and match transcript words to caption words by position, not text, or a repeated word takes the wrong time.
@@ -9,11 +9,15 @@ For a plugin installation, follow [plugin execution rules](plugin-installation.m
9
9
 
10
10
  ## What `init` does
11
11
 
12
- `npx hyperframes init` checks GitHub and refreshes the core set plus other skills already installed. A current install is a no-op. Offline or rate-limited checks degrade gracefully and do not fail project scaffolding.
12
+ `npx hyperframes init` installs the core set when it is missing and leaves every skill that is already installed as it is: it never refreshes, replaces or removes one. Updating is `npx hyperframes skills update`, run by you. Offline or rate-limited checks degrade gracefully and do not fail project scaffolding.
13
13
 
14
- The `--skip-skills` CLI flag is temporarily ignored. CI and tests may opt out with `HYPERFRAMES_SKIP_SKILLS=1`.
14
+ `--skip-skills` makes `init` leave skills alone. `HYPERFRAMES_SKIP_SKILLS=1` does the same for CI and tests.
15
15
 
16
- `HYPERFRAMES_SKIP_SKILLS=1` also makes `skills update` (bare or named) and bare `skills` exit 0 without installing or pruning, so an install pinned to one commit stays pinned.
16
+ `HYPERFRAMES_SKIP_SKILLS=1` also makes `skills update` (bare or named) and bare `skills` exit 0 without installing, so an install pinned to one commit stays pinned.
17
+
18
+ ## Stale-skills notice
19
+
20
+ After `render`, `lint` and `validate`, the CLI prints `N HyperFrames skills out of date or missing` to stderr when the cached check finds stale skills, so an agent run without a terminal sees it too. It is off in CI, in dev, with `HYPERFRAMES_NO_UPDATE_CHECK=1` and with `HYPERFRAMES_SKIP_SKILLS=1`, and runs with `--json` too, since it only writes stderr and leaves `--json` stdout untouched.
17
21
 
18
22
  ## Diagnose and update
19
23
 
@@ -26,7 +30,7 @@ npx hyperframes skills
26
30
  ```
27
31
 
28
32
  - `skills check` exits non-zero when an installed skill is stale or the core set is incomplete. Skills available on demand but not installed are not failures.
29
- - Bare `skills update` refreshes the core set and everything already installed, and removes skills that are no longer published.
33
+ - Bare `skills update` refreshes the core set and the HyperFrames skills already installed. It never removes a skill, and it leaves a skill the install record attributes to another publisher alone, even when the name matches one of ours.
30
34
  - Named `skills update <name...>` also installs those named skills.
31
35
  - Bare `skills` installs the full published set explicitly.
32
36
 
@@ -22,7 +22,7 @@ npx hyperframes cloudrun destroy --project <gcp-project>
22
22
 
23
23
  `sites create` uploads a content-addressed project archive for reuse by `render-batch`; pass its `--site-id` to that command to skip the batch upload. Single `cloudrun render` currently resolves the project from its directory and does not consume `--site-id`. Both render commands require `--width` and `--height`; supported output formats are `mp4`, `mov`, `png-sequence`, and `webm`. Use `--output-resolution 4k` to supersample an authored composition without changing its layout dimensions.
24
24
 
25
- Common render flags are `--fps 24|30|60`, `--quality draft|standard|high`, `--codec h264|h265` for MP4, `--chunk-size`, `--max-parallel-chunks`, `--target-chunk-frames`, `--render-id`, `--output-key`, `--wait`, and `--wait-interval-ms`. Use `--json` for machine-readable output.
25
+ Common render flags are `--fps 24|25|30|60`, `--quality draft|standard|high`, `--codec h264|h265` for MP4, `--chunk-size`, `--max-parallel-chunks`, `--target-chunk-frames`, `--render-id`, `--output-key`, `--wait`, and `--wait-interval-ms`. Use `--json` for machine-readable output.
26
26
 
27
27
  For a variable-driven single render:
28
28
 
@@ -24,7 +24,7 @@ Other useful flags:
24
24
 
25
25
  - `--resolution` — preset: `landscape` (1920×1080), `portrait` (1080×1920), `landscape-4k`, `portrait-4k`, `square` (1080×1080), `square-4k`. Aliases: `1080p`, `4k`, `uhd`, `1080p-square`, `4k-square`.
26
26
  - `--skill=<slug>` — record the owning skill (e.g. `hyperframes`) in `hyperframes.json`, so every later render of this project — re-renders, `npm run render`, `--batch` — is attributed to it on anonymous telemetry without re-passing the flag. You rarely pass it by hand.
27
- - `--skip-skills` — **temporarily ignored**: `init` always checks AI coding skills against GitHub while the skills.sh registry catches up. To opt out (CI/tests), set the `HYPERFRAMES_SKIP_SKILLS=1` env var instead.
27
+ - `--skip-skills` — leave AI coding skills alone: `init` does not install the core set. `HYPERFRAMES_SKIP_SKILLS=1` does the same.
28
28
  - `--skip-transcribe` — don't auto-transcribe `--audio` / `--video` with Whisper.
29
29
  - `--model`, `--language` — Whisper model / language for the auto-transcription.
30
30
 
@@ -84,7 +84,7 @@ Starts a Step Functions execution. Returns immediately with a `renderId` unless
84
84
  | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
85
85
  | `--width` / `--height` | Output dimensions in pixels |
86
86
  | `--output-resolution` | Supersampling preset (engages Chrome `deviceScaleFactor`) — `landscape` / `landscape-4k` / `portrait` / `portrait-4k` / `square` / `square-4k`, plus aliases (`1080p`, `4k`, `uhd`, `hd`, `1080p-portrait`, `4k-portrait`, `1080p-square`, `4k-square`). Use this to render an authored-at-1080p composition at 4K without re-laying-out — see footgun below. |
87
- | `--fps` | `24` / `30` / `60` |
87
+ | `--fps` | `24` / `25` / `30` / `60` |
88
88
  | `--format` | `mp4` / `mov` / `png-sequence` / `webm` (default `mp4`) |
89
89
  | `--codec` | `h264` / `h265` (mp4 only) |
90
90
  | `--quality` | `draft` / `standard` / `high` |
@@ -111,7 +111,7 @@ Drop a `*.motion.json` sidecar next to the composition (matching the html basena
111
111
  npx hyperframes snapshot # 5 key frames as PNG
112
112
  npx hyperframes snapshot ./my-project # specific project
113
113
  npx hyperframes snapshot --frames 10 # evenly-spaced N frames
114
- npx hyperframes snapshot --range 3:5 --frames 8 # 8 frames within root-timeline seconds 3–5
114
+ npx hyperframes snapshot --range 3,5 --frames 8 # 8 frames within root-timeline seconds 3–5
115
115
  npx hyperframes snapshot --composition intro --frames 8 # 8 frames within this data-composition-id
116
116
  npx hyperframes snapshot --review # beat sheet, seam strips, phone sheet
117
117
  npx hyperframes snapshot --review --json # same, with paths and times as JSON
@@ -119,7 +119,7 @@ npx hyperframes snapshot --review --json # same, with paths and times as J
119
119
 
120
120
  Still PNGs. Each run writes `.hyperframes/artifacts/snapshots/<id>/` unless `--output` is set. `snapshot` is the standalone capture; `check --snapshots` is the gate.
121
121
 
122
- One of `--at`, `--range START:END` (seconds), or `--composition <data-composition-id>` (not a CSS selector). `--frames` defaults to 5. Range and composition sample just before the end and add no extra end frame; `--at` adds one unless `--no-end`.
122
+ One of `--at`, `--range START,END` (seconds), or `--composition <data-composition-id>` (not a CSS selector). `--frames` defaults to 5. Range and composition sample just before the end and add no extra end frame; `--at` adds one unless `--no-end`.
123
123
 
124
124
  `--review` picks the frames that show a film over time. Scenes are the composition's top-level timed clips and sub-composition hosts, as `timeline` lists them (captions and audio excluded); `--composition` scopes to one. It writes `review-beats.jpg` (each scene at its start + 0.3 s and at its middle, and each timed `data-beat="name"` element at its start + 0.3 s, labelled with time and id), `review-seam-NN.jpg` (frames at −0.2, −0.1, 0, +0.1, +0.2 s around every cut) and `review-phone.jpg` (the beat frames 360 px wide, to judge legibility at phone size), beside the `beat-*.png` and `seam-*.png` stills. With fewer than two scenes the beats spread evenly. `--json` prints `{ok, outputDir, frames[{path,time,role,label}], contactSheets, review{window, scenes, beats, seams[{time,from,to,times,paths,sheet}], sheets, notes}}`.
125
125
 
@@ -120,7 +120,7 @@ npx hyperframes render --docker # byte-identical
120
120
  | `dir` (positional) | path | cwd | Project directory. Omit to use current working directory. |
121
121
  | `--composition`, `-c` | path to composition file | `index.html` | Render a specific composition file (e.g. `compositions/intro.html`) instead of the project's `index.html`. |
122
122
  | `--output`, `-o` | path | `renders/<project>_<ts>.<ext>` | Output path. Default is timestamped (`<project-name>_YYYY-MM-DD_HH-MM-SS.<ext>`). |
123
- | `--fps` | 24, 30, 60 | 30 | 60fps doubles render time |
123
+ | `--fps` | 1–240, or a rational such as `30000/1001` | root `data-fps`, else 30 | 60fps doubles render time. `lambda` and `cloudrun` accept only 24, 25, 30, 60 |
124
124
  | `--quality` | draft, looks, delivery, standard, high | looks | `looks` is CRF 16 on the standard preset. `delivery` is `high`. draft for iterating |
125
125
  | `--format` | mp4, webm, mov, gif, png-sequence, hls | mp4 | WebM/MOV render with transparency; gif for inline autoplay in GitHub PRs/READMEs/docs (two-pass palette encode, fps capped at 30 — prefer `--fps 15` — no audio, 1-bit transparency only, HDR falls back to SDR); png-sequence writes RGBA frames to a directory (AE/Nuke/Fusion ingest); hls writes an HLS VOD directory (master.m3u8 + video/audio playlists + MPEG-TS segments), SDR only, rejects `--gpu`, unavailable on lambda/cloudrun |
126
126
  | `--gif-loop` | 0-65535 | 0 | GIF loop count; `0` loops forever. Only with `--format gif`. |
@@ -132,11 +132,3 @@ Run `npx hyperframes usage --json` at the start of a video workflow and again at
132
132
  Known results contain `status: "known"`, `harness`, `planTier`, `session`, `weekly`, and `spend`. Each available window contains `usedPercent`, `remainingPercent`, and `resetsAt`; an unavailable window is `null`. `planTier` is the readable subscription tier when available, otherwise `null`. Claude Code reports its shared five-hour and weekly windows; a spend-metered plan (such as Enterprise) has neither and reports `spend`, the share of its billing-period spend limit already used, with `resetsAt: null`. Codex reports its shared session and weekly windows when available. Grok reports its included weekly allowance with `session: null`. Only Claude Code reports `spend`; it is `null` elsewhere. When no window is available the result is `status: "unknown"` with `reason: "no_usage_windows"`.
133
133
 
134
134
  Unknown results contain `status: "unknown"` and a token-free `reason`. Missing, expired, unsupported, ambiguous, or unreadable logins and unavailable provider responses return unknown. Report the unknown state without guessing allowance. The command reads existing credentials without refreshing or rewriting them and emits no tokens or telemetry. Usage is a snapshot; it does not reserve allowance or estimate the next video's cost. Keep scope and workflow choices with the user.
135
-
136
- ## Remaining harness usage
137
-
138
- Run `npx hyperframes usage --json` at the start of a video workflow and again at milestones such as after drafting and before rendering. A fresh read at handoff can serve as the start read. Use `--harness claude-code`, `--harness codex`, or `--harness grok` to select explicitly.
139
-
140
- Known results contain `status: "known"`, `harness`, `planTier`, `session`, `weekly`, and `spend`. Each available window contains `usedPercent`, `remainingPercent`, and `resetsAt`; an unavailable window is `null`. `planTier` is the readable subscription tier when available, otherwise `null`. Claude Code reports its shared five-hour and weekly windows; a spend-metered plan (such as Enterprise) has neither and reports `spend`, the share of its billing-period spend limit already used, with `resetsAt: null`. Codex reports its shared session and weekly windows when available. Grok reports its included weekly allowance with `session: null`. Only Claude Code reports `spend`; it is `null` elsewhere. When no window is available the result is `status: "unknown"` with `reason: "no_usage_windows"`.
141
-
142
- Unknown results contain `status: "unknown"` and a token-free `reason`. Missing, expired, unsupported, ambiguous, or unreadable logins and unavailable provider responses return unknown. Report the unknown state without guessing allowance. The command reads existing credentials without refreshing or rewriting them and emits no tokens or telemetry. Usage is a snapshot; it does not reserve allowance or estimate the next video's cost. Keep scope and workflow choices with the user.
@@ -1,6 +1,6 @@
1
1
  # Transcription
2
2
 
3
- Create normalized word-level timestamps. **Always specify `--model` explicitly** — the CLI default is `small.en`, which silently translates non-English audio into English.
3
+ Create normalized word-level timestamps. **Always specify `--model` explicitly** — `npx hyperframes transcribe` uses `small.en` as its default whisper model, which silently translates non-English audio into English.
4
4
 
5
5
  ```bash
6
6
  npx hyperframes transcribe audio.mp3 --model small.en # known English
@@ -19,7 +19,7 @@ npx hyperframes transcribe openai-response.json
19
19
  2. **Known non-English** → `--model small --language <iso-code>` (no `.en` suffix)
20
20
  3. **Unknown language** → `--model small` (whisper auto-detects)
21
21
 
22
- **CLI default is `small.en`** — do not rely on it; always pass `--model` to make the choice explicit. `--language` also filters out non-target-language segments from mixed-language audio.
22
+ **The CLI's default whisper model is `small.en`** — do not rely on it; always pass `--model` to make the choice explicit. `--language` also filters out non-target-language segments from mixed-language audio.
23
23
 
24
24
  ## Model Sizes
25
25
 
@@ -17,4 +17,4 @@ node <SKILL_DIR>/audio/scripts/audio.mjs --request ./audio_request.json --out ./
17
17
 
18
18
  Single-shot helpers: `audio/scripts/heygen-tts.mjs` (one voice file). Transcription / background removal / captions use the `hyperframes` CLI (`transcribe`, `remove-background`), see the per-topic guides in `audio/references/` (`tts.md`, `bgm.md`, `sfx.md`, `transcribe.md`, `remove-background.md`, `captions/`).
19
19
 
20
- Transcription defaults to Parakeet (better than whisper.cpp: 6.05% vs 7.44% WER, 5-10x faster) via `scripts/transcribe.mjs`, with whisper.cpp auto-fallback (see `references/operations.md`).
20
+ Transcription through `scripts/transcribe.mjs` defaults to Parakeet (better than whisper.cpp: 6.05% vs 7.44% WER, 5-10x faster), with whisper.cpp auto-fallback (see `references/operations.md`). `npx hyperframes transcribe` picks its own engine: Parakeet when installed, otherwise whisper with the `small.en` model by default.
@@ -15,8 +15,8 @@ import {
15
15
  } from "./chunk-WMQNIQDJ.js";
16
16
  import {
17
17
  trackSkillsInstallSkipped
18
- } from "./chunk-OOAVKK2W.js";
19
- import "./chunk-TTZTGXKG.js";
18
+ } from "./chunk-BV6YE455.js";
19
+ import "./chunk-GANST5K3.js";
20
20
  import {
21
21
  diag
22
22
  } from "./chunk-VWG7OQKU.js";
@@ -39,24 +39,22 @@ import "./chunk-W2LGJSEN.js";
39
39
  import {
40
40
  FALLBACK_CORE_SKILLS,
41
41
  RETIRED_SKILLS,
42
- SKILLS_CLI_LOCK_PATHS_VERIFIED_AT,
43
42
  checkSkills,
44
43
  hyperframesSkillNames,
45
44
  invalidateSkillsCache,
46
45
  isCoreSkill,
47
46
  presentSkills,
48
- pruneOrphanedLockEntries,
49
47
  retiredSkillNotice
50
- } from "./chunk-EUUHVDMN.js";
48
+ } from "./chunk-ZEMDV6W2.js";
51
49
  import {
52
50
  withMeta
53
- } from "./chunk-STJ2ANMF.js";
51
+ } from "./chunk-2HP5GIQ3.js";
54
52
  import "./chunk-K4WIOZFP.js";
55
- import "./chunk-XUXGIA7H.js";
53
+ import "./chunk-6NLPPKBO.js";
56
54
  import "./chunk-WERLJGIC.js";
57
55
  import "./chunk-ISN5GRYI.js";
58
- import "./chunk-F6DNM676.js";
59
- import "./chunk-KNU5COPB.js";
56
+ import "./chunk-3FV5BVWS.js";
57
+ import "./chunk-T2EUWCJE.js";
60
58
  import "./chunk-M2WBOQ2Q.js";
61
59
 
62
60
  // src/commands/skills.ts
@@ -421,15 +419,6 @@ function runSkillsAdd(source, selection, opts = {}) {
421
419
  );
422
420
  }
423
421
  var PLAIN_SKILL_NAME = /^[a-z0-9][a-z0-9._-]*$/i;
424
- function runSkillsRemove(names, opts) {
425
- const safe = names.filter((n) => PLAIN_SKILL_NAME.test(n));
426
- const rejected = names.filter((n) => !PLAIN_SKILL_NAME.test(n));
427
- if (rejected.length) {
428
- R.warn(c.warn(`Skipping unexpected skill name(s): ${rejected.join(", ")}`));
429
- }
430
- if (!safe.length) return Promise.resolve();
431
- return spawnNpx(["skills", "remove", ...safe, ...opts.global ? ["-g"] : [], "--yes"]);
432
- }
433
422
  var SOURCES = [{ name: "HyperFrames", url: "https://github.com/heygen-com/hyperframes" }];
434
423
  function mirrorToInstalledAgents() {
435
424
  try {
@@ -533,7 +522,7 @@ async function updateSkills(opts = {}) {
533
522
  }
534
523
  return { ...await updateSkillsOffline(requested, { strict, cwd: opts.cwd }), retired };
535
524
  }
536
- const manifestSkills = check.skills.filter((s) => s.status !== "removed");
525
+ const manifestSkills = check.skills;
537
526
  const manifestNames = new Set(manifestSkills.map((s) => s.name));
538
527
  const unknown = requested.filter((name) => !manifestNames.has(name));
539
528
  if (unknown.length) {
@@ -544,7 +533,9 @@ async function updateSkills(opts = {}) {
544
533
  const targets = manifestSkills.filter(
545
534
  (s) => opts.all === true || requested.includes(s.name) || isCoreSkill(s.name) || opts.refreshInstalled === true && s.status !== "missing"
546
535
  );
547
- const toInstall = targets.filter((s) => s.status === "missing" || s.status === "outdated");
536
+ const toInstall = targets.filter(
537
+ (s) => s.status === "missing" || s.status === "outdated" && opts.onlyMissing !== true
538
+ );
548
539
  const result = {
549
540
  targets: targets.map((s) => s.name),
550
541
  installed: toInstall.map((s) => s.name),
@@ -619,7 +610,6 @@ function renderCheck(result) {
619
610
  if (summary.outdated) parts.push(c.warn(`\u2191 ${summary.outdated} outdated`));
620
611
  if (summary.coreMissing) parts.push(c.warn(`\u25E6 ${summary.coreMissing} core not installed`));
621
612
  if (onDemandMissing) parts.push(c.dim(`\u25E6 ${onDemandMissing} available on demand`));
622
- if (summary.removed) parts.push(c.warn(`\u2717 ${summary.removed} removed upstream`));
623
613
  console.log(` ${parts.join(" ")}`);
624
614
  printSkillSection(result, "outdated", "Outdated:", "\u2191", c.warn);
625
615
  printSkillSection(
@@ -638,22 +628,6 @@ function renderCheck(result) {
638
628
  c.dim,
639
629
  (s) => !isCoreSkill(s.name)
640
630
  );
641
- printSkillSection(
642
- result,
643
- "removed",
644
- "Removed upstream (renamed or dropped \u2014 no longer published):",
645
- "\u2717",
646
- c.warn
647
- );
648
- if (result.lockMissing) {
649
- console.log();
650
- console.log(
651
- ` ${c.warn(`! Skills lock not found \u2014 can't check for skills removed upstream.`)}`
652
- );
653
- console.log(
654
- ` ${c.dim(` (lock paths verified against ${SKILLS_CLI_LOCK_PATHS_VERIFIED_AT})`)}`
655
- );
656
- }
657
631
  console.log();
658
632
  if (result.updateAvailable) {
659
633
  console.log(` ${c.accent("Update: npx hyperframes skills update")}`);
@@ -737,26 +711,12 @@ function reportUpdateFailure(message, json) {
737
711
  var updateCommand = defineCommand({
738
712
  meta: {
739
713
  name: "update",
740
- description: "Update the core set plus every installed HyperFrames skill to the latest, and remove any no longer published. Pass skill names to also install those (how on-demand skills install) \u2014 without names it never expands a partial install"
714
+ description: "Update the core set plus every installed HyperFrames skill to the latest. Pass skill names to also install those (how on-demand skills install) \u2014 without names it never expands a partial install, and it never removes a skill"
741
715
  },
742
- // Mirror `check`'s flags: the prune step runs the same removed-detection, so it
743
- // must respect the same overrides. Without these, `update`'s internal
744
- // checkSkills() fell back to defaults — pruning the auto-detected install
745
- // against the default manifest even when the user pointed `check` elsewhere.
746
716
  args: {
747
- json: { type: "boolean", description: "Output as JSON", default: false },
748
- dir: {
749
- type: "string",
750
- description: "Skills dir for removed-detection only \u2014 scopes the prune, not the install (default: auto-detect)"
751
- },
752
- source: {
753
- type: "string",
754
- description: "Where 'latest' comes from for removed-detection (local path, owner/repo, or URL) \u2014 does not change the install source"
755
- }
717
+ json: { type: "boolean", description: "Output as JSON", default: false }
756
718
  },
757
719
  async run({ args }) {
758
- const dir = args.dir;
759
- const source = args.source;
760
720
  const { requested, rejected } = requestedNamesFrom(args._ ?? []);
761
721
  if (rejected.length) {
762
722
  reportUpdateFailure(`Invalid skill name(s): ${rejected.join(", ")}`, args.json === true);
@@ -775,28 +735,6 @@ var updateCommand = defineCommand({
775
735
  setCommandExitCode(1);
776
736
  return;
777
737
  }
778
- try {
779
- const { skills, scope } = await checkSkills({ dir, source, canonical: true });
780
- const removed = skills.filter((s) => s.status === "removed").map((s) => s.name);
781
- if (removed.length) {
782
- console.log();
783
- console.log(
784
- c.dim(`Removing ${removed.length} skill(s) no longer published: ${removed.join(", ")}`)
785
- );
786
- await runSkillsRemove(removed, { global: scope === "global" });
787
- const scopeForPrune = scope ?? "global";
788
- const stillOrphaned = pruneOrphanedLockEntries(removed, scopeForPrune);
789
- if (stillOrphaned.length) {
790
- console.log(
791
- c.dim(
792
- `Reconciled ${stillOrphaned.length} orphaned lock entr${stillOrphaned.length === 1 ? "y" : "ies"} with no on-disk bundle: ${stillOrphaned.join(", ")}`
793
- )
794
- );
795
- }
796
- }
797
- } catch (err) {
798
- R.warn(c.warn(`Skipped removed-skill cleanup: ${err.message}`));
799
- }
800
738
  }
801
739
  });
802
740
  var skills_default = defineCommand({
@@ -9,14 +9,14 @@ import {
9
9
  printSkillsUpdateNotice,
10
10
  refreshSkillsCache,
11
11
  skillsCheckDue
12
- } from "./chunk-EUUHVDMN.js";
13
- import "./chunk-STJ2ANMF.js";
12
+ } from "./chunk-ZEMDV6W2.js";
13
+ import "./chunk-2HP5GIQ3.js";
14
14
  import "./chunk-K4WIOZFP.js";
15
- import "./chunk-XUXGIA7H.js";
15
+ import "./chunk-6NLPPKBO.js";
16
16
  import "./chunk-WERLJGIC.js";
17
17
  import "./chunk-ISN5GRYI.js";
18
- import "./chunk-F6DNM676.js";
19
- import "./chunk-KNU5COPB.js";
18
+ import "./chunk-3FV5BVWS.js";
19
+ import "./chunk-T2EUWCJE.js";
20
20
  import "./chunk-M2WBOQ2Q.js";
21
21
  export {
22
22
  invalidateSkillsCache,
@@ -12,7 +12,7 @@ import {
12
12
  parseSlideshowManifest,
13
13
  resolveSlideshow,
14
14
  slideshowIslandRegex
15
- } from "./chunk-IXLUTE6N.js";
15
+ } from "./chunk-3422KMTD.js";
16
16
  import "./chunk-M2WBOQ2Q.js";
17
17
  export {
18
18
  SLIDESHOW_ISLAND_TYPE,