@ignix-social/editor 0.1.0

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 (586) hide show
  1. package/LICENSE +190 -0
  2. package/NOTICE +54 -0
  3. package/README.md +23 -0
  4. package/bin/ignix-editor.mjs +8 -0
  5. package/package.json +53 -0
  6. package/patches/index.mjs +53 -0
  7. package/scripts/build-ffmpeg-macos.sh +35 -0
  8. package/scripts/build-whisper-macos.sh +21 -0
  9. package/scripts/vendor.mjs +41 -0
  10. package/skills/ignix-editor/SKILL.md +132 -0
  11. package/src/audio.mjs +31 -0
  12. package/src/binaries.json +46 -0
  13. package/src/binaries.mjs +83 -0
  14. package/src/cli.mjs +254 -0
  15. package/src/prepare.mjs +74 -0
  16. package/src/runtime/ignix-frame.js +92 -0
  17. package/src/transcribe.mjs +71 -0
  18. package/src/validate.mjs +71 -0
  19. package/templates/blank/index.html +41 -0
  20. package/vendor/hyperframes/README.md +181 -0
  21. package/vendor/hyperframes/UPSTREAM.json +12 -0
  22. package/vendor/hyperframes/bin/hyperframes-localize-fonts.mjs +12 -0
  23. package/vendor/hyperframes/bin/hyperframes.mjs +11 -0
  24. package/vendor/hyperframes/dist/add-LR3ZR2A5.js +79 -0
  25. package/vendor/hyperframes/dist/agentPromptGenerator-VIIPZCJ3.js +143 -0
  26. package/vendor/hyperframes/dist/animatedGifPrep-P2T6YM7Z.js +34 -0
  27. package/vendor/hyperframes/dist/asset-BE2DOV72.js +26 -0
  28. package/vendor/hyperframes/dist/assetCataloger-VBLPHX24.js +340 -0
  29. package/vendor/hyperframes/dist/auth-RCQB2ZT7.js +60 -0
  30. package/vendor/hyperframes/dist/autoUpdate-RJAX3DAZ.js +268 -0
  31. package/vendor/hyperframes/dist/backgroundChecks-H2LCUIMJ.js +61 -0
  32. package/vendor/hyperframes/dist/backgroundChecksWorker.js +26 -0
  33. package/vendor/hyperframes/dist/batchRender-FT7AP7XH.js +355 -0
  34. package/vendor/hyperframes/dist/beat-analyzer.global.js +338 -0
  35. package/vendor/hyperframes/dist/beats-Y2EOP72P.js +309 -0
  36. package/vendor/hyperframes/dist/benchmark-MZ7GY3JW.js +231 -0
  37. package/vendor/hyperframes/dist/browser-HUTAMRQE.js +237 -0
  38. package/vendor/hyperframes/dist/bundleWithLocalizedFonts-5QOPOB5D.js +52 -0
  39. package/vendor/hyperframes/dist/capture-RLZA6EMR.js +4079 -0
  40. package/vendor/hyperframes/dist/capture-SZZ4IYJK.js +290 -0
  41. package/vendor/hyperframes/dist/captureFile-LYOJOUIE.js +15 -0
  42. package/vendor/hyperframes/dist/captureTimeout-PA4FYWT5.js +27 -0
  43. package/vendor/hyperframes/dist/catalog-KYU55EWR.js +1001 -0
  44. package/vendor/hyperframes/dist/check-TCG4PXLR.js +1697 -0
  45. package/vendor/hyperframes/dist/checkBrowser-RPMO4OW5.js +1032 -0
  46. package/vendor/hyperframes/dist/chunk-2EAXUCCE.js +88 -0
  47. package/vendor/hyperframes/dist/chunk-2EGFTPWD.js +1077 -0
  48. package/vendor/hyperframes/dist/chunk-2PSPARWP.js +6058 -0
  49. package/vendor/hyperframes/dist/chunk-2YN64IN5.js +5747 -0
  50. package/vendor/hyperframes/dist/chunk-3GXQPCJC.js +682 -0
  51. package/vendor/hyperframes/dist/chunk-3ZP5DXE7.js +15 -0
  52. package/vendor/hyperframes/dist/chunk-4NWOGZZS.js +1990 -0
  53. package/vendor/hyperframes/dist/chunk-4PFZPP2N.js +587 -0
  54. package/vendor/hyperframes/dist/chunk-4THIAPBL.js +128 -0
  55. package/vendor/hyperframes/dist/chunk-4YYJOFKS.js +28 -0
  56. package/vendor/hyperframes/dist/chunk-54HJ63Q2.js +29 -0
  57. package/vendor/hyperframes/dist/chunk-5ETJX6WM.js +89 -0
  58. package/vendor/hyperframes/dist/chunk-5IAKAQA7.js +389 -0
  59. package/vendor/hyperframes/dist/chunk-5Z63TBTX.js +37 -0
  60. package/vendor/hyperframes/dist/chunk-6BEFEWFB.js +25 -0
  61. package/vendor/hyperframes/dist/chunk-6CSYCFQV.js +68 -0
  62. package/vendor/hyperframes/dist/chunk-6CTIGJY7.js +154 -0
  63. package/vendor/hyperframes/dist/chunk-7HG4BFIN.js +93 -0
  64. package/vendor/hyperframes/dist/chunk-7JZ4FXP2.js +118 -0
  65. package/vendor/hyperframes/dist/chunk-A2Z4Z4VL.js +2961 -0
  66. package/vendor/hyperframes/dist/chunk-AMKC3AXA.js +25 -0
  67. package/vendor/hyperframes/dist/chunk-AVUUN2XD.js +4847 -0
  68. package/vendor/hyperframes/dist/chunk-AWDFDFI3.js +46 -0
  69. package/vendor/hyperframes/dist/chunk-AWNBM3MZ.js +94 -0
  70. package/vendor/hyperframes/dist/chunk-BXCMXMJQ.js +73 -0
  71. package/vendor/hyperframes/dist/chunk-BZ56MTDX.js +6 -0
  72. package/vendor/hyperframes/dist/chunk-CFKU7HTK.js +171 -0
  73. package/vendor/hyperframes/dist/chunk-CWPVM2QV.js +308 -0
  74. package/vendor/hyperframes/dist/chunk-DPVXBVLL.js +31292 -0
  75. package/vendor/hyperframes/dist/chunk-DQBY7FRR.js +397 -0
  76. package/vendor/hyperframes/dist/chunk-E6RPWJVC.js +213 -0
  77. package/vendor/hyperframes/dist/chunk-EISRN4E6.js +294 -0
  78. package/vendor/hyperframes/dist/chunk-EOVYQ3IG.js +143 -0
  79. package/vendor/hyperframes/dist/chunk-F3WZGU7C.js +479 -0
  80. package/vendor/hyperframes/dist/chunk-FCSIGXXP.js +366 -0
  81. package/vendor/hyperframes/dist/chunk-FI4I7CME.js +56 -0
  82. package/vendor/hyperframes/dist/chunk-FLWXXDNS.js +15 -0
  83. package/vendor/hyperframes/dist/chunk-GK4AIFIH.js +11171 -0
  84. package/vendor/hyperframes/dist/chunk-GMECXFAN.js +57 -0
  85. package/vendor/hyperframes/dist/chunk-GULOKZLI.js +155 -0
  86. package/vendor/hyperframes/dist/chunk-H4YZZ2VQ.js +68 -0
  87. package/vendor/hyperframes/dist/chunk-H6QMKUYA.js +477 -0
  88. package/vendor/hyperframes/dist/chunk-HBBJFK6I.js +273 -0
  89. package/vendor/hyperframes/dist/chunk-HRUGC23L.js +212 -0
  90. package/vendor/hyperframes/dist/chunk-HVW7ABXD.js +19 -0
  91. package/vendor/hyperframes/dist/chunk-HW6OYASV.js +344 -0
  92. package/vendor/hyperframes/dist/chunk-HWKCIWQT.js +3578 -0
  93. package/vendor/hyperframes/dist/chunk-I465DBM6.js +1214 -0
  94. package/vendor/hyperframes/dist/chunk-IGLEPPTN.js +24 -0
  95. package/vendor/hyperframes/dist/chunk-IGNAAHS3.js +433 -0
  96. package/vendor/hyperframes/dist/chunk-IHFUKJOR.js +85 -0
  97. package/vendor/hyperframes/dist/chunk-IQ3OUQ5Z.js +213 -0
  98. package/vendor/hyperframes/dist/chunk-ISN5GRYI.js +20 -0
  99. package/vendor/hyperframes/dist/chunk-IUZFXWSV.js +446 -0
  100. package/vendor/hyperframes/dist/chunk-JH556Q42.js +647 -0
  101. package/vendor/hyperframes/dist/chunk-JTHMTOMQ.js +601 -0
  102. package/vendor/hyperframes/dist/chunk-K2EQN4VU.js +405 -0
  103. package/vendor/hyperframes/dist/chunk-K2FTXJYH.js +16044 -0
  104. package/vendor/hyperframes/dist/chunk-K4WIOZFP.js +32 -0
  105. package/vendor/hyperframes/dist/chunk-K4WKGXRC.js +18 -0
  106. package/vendor/hyperframes/dist/chunk-KBJUXVOJ.js +172 -0
  107. package/vendor/hyperframes/dist/chunk-KC5XXX3X.js +590 -0
  108. package/vendor/hyperframes/dist/chunk-KNU5COPB.js +29 -0
  109. package/vendor/hyperframes/dist/chunk-KZI44OPA.js +185 -0
  110. package/vendor/hyperframes/dist/chunk-L3YOGIPG.js +48 -0
  111. package/vendor/hyperframes/dist/chunk-LAOCA3MQ.js +189 -0
  112. package/vendor/hyperframes/dist/chunk-LCSMOLGX.js +312 -0
  113. package/vendor/hyperframes/dist/chunk-LFGJWOVA.js +61 -0
  114. package/vendor/hyperframes/dist/chunk-LHSR3M4M.js +498 -0
  115. package/vendor/hyperframes/dist/chunk-LYNI3FOL.js +123 -0
  116. package/vendor/hyperframes/dist/chunk-M2WBOQ2Q.js +54 -0
  117. package/vendor/hyperframes/dist/chunk-MRF4AMKD.js +104 -0
  118. package/vendor/hyperframes/dist/chunk-MWB3ZIFM.js +852 -0
  119. package/vendor/hyperframes/dist/chunk-NGKM64BP.js +39 -0
  120. package/vendor/hyperframes/dist/chunk-NXMYHJAL.js +43 -0
  121. package/vendor/hyperframes/dist/chunk-OAF4XJOW.js +192 -0
  122. package/vendor/hyperframes/dist/chunk-OFQWTKPW.js +117 -0
  123. package/vendor/hyperframes/dist/chunk-P6LJ4Y32.js +4662 -0
  124. package/vendor/hyperframes/dist/chunk-PBN6GBJE.js +108 -0
  125. package/vendor/hyperframes/dist/chunk-PDAMK4Q5.js +28 -0
  126. package/vendor/hyperframes/dist/chunk-PFCFR3KZ.js +20 -0
  127. package/vendor/hyperframes/dist/chunk-PJ3HDUCY.js +108 -0
  128. package/vendor/hyperframes/dist/chunk-PMRBLBUP.js +152 -0
  129. package/vendor/hyperframes/dist/chunk-PPQUYWTW.js +240 -0
  130. package/vendor/hyperframes/dist/chunk-Q5X2B5WT.js +29 -0
  131. package/vendor/hyperframes/dist/chunk-Q7IU7MOR.js +351 -0
  132. package/vendor/hyperframes/dist/chunk-QC4FJVLM.js +371 -0
  133. package/vendor/hyperframes/dist/chunk-QNYYOUU3.js +1318 -0
  134. package/vendor/hyperframes/dist/chunk-RDNNAKEP.js +161 -0
  135. package/vendor/hyperframes/dist/chunk-RMHUQGRK.js +657 -0
  136. package/vendor/hyperframes/dist/chunk-RQVDTPGD.js +6 -0
  137. package/vendor/hyperframes/dist/chunk-RVCWIIZ7.js +68 -0
  138. package/vendor/hyperframes/dist/chunk-S3D6GE5W.js +72 -0
  139. package/vendor/hyperframes/dist/chunk-S3S4TGEH.js +424 -0
  140. package/vendor/hyperframes/dist/chunk-S7NPLFWV.js +11395 -0
  141. package/vendor/hyperframes/dist/chunk-SHB5VDMH.js +51 -0
  142. package/vendor/hyperframes/dist/chunk-TCLGPL65.js +860 -0
  143. package/vendor/hyperframes/dist/chunk-THXFSPLV.js +40 -0
  144. package/vendor/hyperframes/dist/chunk-TJSTGSAW.js +354 -0
  145. package/vendor/hyperframes/dist/chunk-TQFG7HTI.js +1024 -0
  146. package/vendor/hyperframes/dist/chunk-TVCRUG2S.js +265 -0
  147. package/vendor/hyperframes/dist/chunk-TWWSYAKJ.js +24 -0
  148. package/vendor/hyperframes/dist/chunk-U7CZBDMV.js +27 -0
  149. package/vendor/hyperframes/dist/chunk-UEZXMWG3.js +139 -0
  150. package/vendor/hyperframes/dist/chunk-UYEZTK4U.js +61 -0
  151. package/vendor/hyperframes/dist/chunk-VC76R6W2.js +27 -0
  152. package/vendor/hyperframes/dist/chunk-VFCKXTBB.js +159 -0
  153. package/vendor/hyperframes/dist/chunk-VWG7OQKU.js +22 -0
  154. package/vendor/hyperframes/dist/chunk-VXVRPIJA.js +105 -0
  155. package/vendor/hyperframes/dist/chunk-WBLXWOYK.js +15 -0
  156. package/vendor/hyperframes/dist/chunk-WERLJGIC.js +20 -0
  157. package/vendor/hyperframes/dist/chunk-WMQNIQDJ.js +2057 -0
  158. package/vendor/hyperframes/dist/chunk-WPHMNO44.js +4528 -0
  159. package/vendor/hyperframes/dist/chunk-X5HWXQPU.js +113 -0
  160. package/vendor/hyperframes/dist/chunk-X7MTZ4T2.js +6 -0
  161. package/vendor/hyperframes/dist/chunk-XH4DSOS5.js +59 -0
  162. package/vendor/hyperframes/dist/chunk-XS4EJSKU.js +23 -0
  163. package/vendor/hyperframes/dist/chunk-XT5P4QMO.js +181 -0
  164. package/vendor/hyperframes/dist/chunk-XT7X6QCP.js +6 -0
  165. package/vendor/hyperframes/dist/chunk-XUHOIDKG.js +6 -0
  166. package/vendor/hyperframes/dist/chunk-XUXGIA7H.js +485 -0
  167. package/vendor/hyperframes/dist/chunk-XZABUQTX.js +113 -0
  168. package/vendor/hyperframes/dist/chunk-Y6W4DVPS.js +356 -0
  169. package/vendor/hyperframes/dist/chunk-YEIFI443.js +44 -0
  170. package/vendor/hyperframes/dist/chunk-YQZNILVH.js +375 -0
  171. package/vendor/hyperframes/dist/chunk-Z27A7NUB.js +65 -0
  172. package/vendor/hyperframes/dist/chunk-Z6B37SNM.js +3081 -0
  173. package/vendor/hyperframes/dist/chunk-ZJUKFZ2P.js +10954 -0
  174. package/vendor/hyperframes/dist/chunk-ZKDMAOFU.js +32 -0
  175. package/vendor/hyperframes/dist/chunk-ZMXUQLI2.js +17219 -0
  176. package/vendor/hyperframes/dist/chunk-ZTZ7NCJT.js +58 -0
  177. package/vendor/hyperframes/dist/chunk-ZTZA4UWZ.js +108 -0
  178. package/vendor/hyperframes/dist/clean-W57E5YQ3.js +293 -0
  179. package/vendor/hyperframes/dist/cli.js +495 -0
  180. package/vendor/hyperframes/dist/cloud-FFTJGZ24.js +70 -0
  181. package/vendor/hyperframes/dist/cloudrun-AJUTHUEA.js +763 -0
  182. package/vendor/hyperframes/dist/colors-HKWSZCGK.js +15 -0
  183. package/vendor/hyperframes/dist/commands/contrast-audit.browser.js +459 -0
  184. package/vendor/hyperframes/dist/commands/layout-audit.browser.js +2102 -0
  185. package/vendor/hyperframes/dist/commands/motion-sample.browser.js +74 -0
  186. package/vendor/hyperframes/dist/commands/motion-signature.browser.js +374 -0
  187. package/vendor/hyperframes/dist/compare-AYCTT55F.js +421 -0
  188. package/vendor/hyperframes/dist/compiler-QO36EXLS.js +121 -0
  189. package/vendor/hyperframes/dist/component-VFFR2O7T.js +176 -0
  190. package/vendor/hyperframes/dist/compositions-QTVN3U2A.js +228 -0
  191. package/vendor/hyperframes/dist/contactSheet-27SRU7A4.js +22 -0
  192. package/vendor/hyperframes/dist/delete-ZAKYCB7I.js +114 -0
  193. package/vendor/hyperframes/dist/deploy-MX76RZ36.js +101 -0
  194. package/vendor/hyperframes/dist/destroy-H2TZBYHH.js +42 -0
  195. package/vendor/hyperframes/dist/deterministicFonts-HAEMV4TM.js +50 -0
  196. package/vendor/hyperframes/dist/dist-EWXJGN63.js +129 -0
  197. package/vendor/hyperframes/dist/dist-FNNGCKFS.js +29 -0
  198. package/vendor/hyperframes/dist/dist-S3PJNPXQ.js +392 -0
  199. package/vendor/hyperframes/dist/docker/Dockerfile.render +65 -0
  200. package/vendor/hyperframes/dist/docs/compositions.md +67 -0
  201. package/vendor/hyperframes/dist/docs/data-attributes.md +27 -0
  202. package/vendor/hyperframes/dist/docs/examples.md +19 -0
  203. package/vendor/hyperframes/dist/docs/gsap.md +26 -0
  204. package/vendor/hyperframes/dist/docs/rendering.md +35 -0
  205. package/vendor/hyperframes/dist/docs/troubleshooting.md +29 -0
  206. package/vendor/hyperframes/dist/docs-QAPJEGLS.js +131 -0
  207. package/vendor/hyperframes/dist/doctor-AI7C3FON.js +67 -0
  208. package/vendor/hyperframes/dist/dom-IROKGVJI.js +14 -0
  209. package/vendor/hyperframes/dist/dotEnv-AECLXQSO.js +14 -0
  210. package/vendor/hyperframes/dist/events-7LALYNKZ.js +92 -0
  211. package/vendor/hyperframes/dist/events-FQY3HGKZ.js +88 -0
  212. package/vendor/hyperframes/dist/feedback-WCMDMSTK.js +472 -0
  213. package/vendor/hyperframes/dist/ffmpeg-QIUFEFTY.js +35 -0
  214. package/vendor/hyperframes/dist/figma-64WY462P.js +63 -0
  215. package/vendor/hyperframes/dist/fontData.generated-NXAOI4GH.js +13 -0
  216. package/vendor/hyperframes/dist/fontLocalizeCli.js +132 -0
  217. package/vendor/hyperframes/dist/get-FPOMJMZB.js +103 -0
  218. package/vendor/hyperframes/dist/gpuPolicy-2ZUZE5D6.js +38 -0
  219. package/vendor/hyperframes/dist/grade-compare-E2CKPST4.js +647 -0
  220. package/vendor/hyperframes/dist/gsapParser-DIYYX6JT.js +2846 -0
  221. package/vendor/hyperframes/dist/gsapParserAcorn-E3GEIRZB.js +28 -0
  222. package/vendor/hyperframes/dist/help-YRQIDDML.js +197 -0
  223. package/vendor/hyperframes/dist/history-PP5NDRV3.js +571 -0
  224. package/vendor/hyperframes/dist/hyperframe-runtime.js +1081 -0
  225. package/vendor/hyperframes/dist/hyperframe.manifest.json +22 -0
  226. package/vendor/hyperframes/dist/hyperframe.runtime.iife.js +1081 -0
  227. package/vendor/hyperframes/dist/hyperframes-player.global.js +474 -0
  228. package/vendor/hyperframes/dist/hyperframes-slideshow.global.js +149 -0
  229. package/vendor/hyperframes/dist/info-SEX3B7JL.js +153 -0
  230. package/vendor/hyperframes/dist/init-U3AKHO5B.js +1147 -0
  231. package/vendor/hyperframes/dist/inspect-Q3K6EDEK.js +97 -0
  232. package/vendor/hyperframes/dist/installer-K6O5WF44.js +37 -0
  233. package/vendor/hyperframes/dist/keyframes-DC64JCI3.js +2602 -0
  234. package/vendor/hyperframes/dist/lambda-D7UMN4DJ.js +451 -0
  235. package/vendor/hyperframes/dist/layout-XSPPDHOO.js +86 -0
  236. package/vendor/hyperframes/dist/lib-TPG2ZMAX.js +128 -0
  237. package/vendor/hyperframes/dist/lint-7DQZE7L3.js +164 -0
  238. package/vendor/hyperframes/dist/lintProject-OHBBM3DJ.js +27 -0
  239. package/vendor/hyperframes/dist/list-4K5MVDQX.js +162 -0
  240. package/vendor/hyperframes/dist/login-NTX4OWXL.js +377 -0
  241. package/vendor/hyperframes/dist/logout-Q654A3SI.js +100 -0
  242. package/vendor/hyperframes/dist/manager-67P2XFXQ.js +34 -0
  243. package/vendor/hyperframes/dist/manager-CT3D67CG.js +38 -0
  244. package/vendor/hyperframes/dist/manager-GFN75DM4.js +30 -0
  245. package/vendor/hyperframes/dist/media-treatment-5FYAOPNL.js +972 -0
  246. package/vendor/hyperframes/dist/media-use-4XXGABIL.js +113 -0
  247. package/vendor/hyperframes/dist/models-C4E4IWJD.js +137 -0
  248. package/vendor/hyperframes/dist/motionShot-S4MIGMT5.js +614 -0
  249. package/vendor/hyperframes/dist/normalize-O76AC4HE.js +333 -0
  250. package/vendor/hyperframes/dist/normalize-audio-CSFTXLXD.js +276 -0
  251. package/vendor/hyperframes/dist/open-2ZD6BHZG.js +115 -0
  252. package/vendor/hyperframes/dist/pipeline-TNGWUZQC.js +54 -0
  253. package/vendor/hyperframes/dist/play-CTMUXX6E.js +349 -0
  254. package/vendor/hyperframes/dist/policies-FSDZVS2E.js +292 -0
  255. package/vendor/hyperframes/dist/preflight-SMNV6RW2.js +45 -0
  256. package/vendor/hyperframes/dist/present-WQVHV5CR.js +350 -0
  257. package/vendor/hyperframes/dist/preview-JOJXTH75.js +1820 -0
  258. package/vendor/hyperframes/dist/producer-ECLEN5RP.js +13 -0
  259. package/vendor/hyperframes/dist/progress-FBIEEB7Y.js +73 -0
  260. package/vendor/hyperframes/dist/projectConfig-HYJMJ5BY.js +56 -0
  261. package/vendor/hyperframes/dist/publication-HQ5Y3KBM.js +29 -0
  262. package/vendor/hyperframes/dist/publish-VHDYQASC.js +430 -0
  263. package/vendor/hyperframes/dist/refresh-K24ETHMA.js +53 -0
  264. package/vendor/hyperframes/dist/remove-background-W2YX2NVH.js +253 -0
  265. package/vendor/hyperframes/dist/render-AO5VX3YI.js +177 -0
  266. package/vendor/hyperframes/dist/render-LNO62LEL.js +2367 -0
  267. package/vendor/hyperframes/dist/render-TTQI7TGN.js +796 -0
  268. package/vendor/hyperframes/dist/render-batch-YH7CTWNY.js +284 -0
  269. package/vendor/hyperframes/dist/renderCancellation-JPIHE47X.js +35 -0
  270. package/vendor/hyperframes/dist/renderSetupWorker.js +79 -0
  271. package/vendor/hyperframes/dist/resolver-IZ647GBZ.js +38 -0
  272. package/vendor/hyperframes/dist/runtimeVersion.js +18 -0
  273. package/vendor/hyperframes/dist/screenshotCapture-ECBTLCU6.js +179 -0
  274. package/vendor/hyperframes/dist/shaderTransitionWorker.js +44 -0
  275. package/vendor/hyperframes/dist/sherpa-KKLNW6U2.js +314 -0
  276. package/vendor/hyperframes/dist/sherpaWorker.js +77 -0
  277. package/vendor/hyperframes/dist/sites-TNVKZS73.js +52 -0
  278. package/vendor/hyperframes/dist/skill-ZHVLH7KX.js +15 -0
  279. package/vendor/hyperframes/dist/skills/hyperframes/SKILL.md +152 -0
  280. package/vendor/hyperframes/dist/skills/hyperframes/references/brief-contract.md +108 -0
  281. package/vendor/hyperframes/dist/skills/hyperframes/references/brief-format.md +72 -0
  282. package/vendor/hyperframes/dist/skills/hyperframes/references/capability-menu.md +47 -0
  283. package/vendor/hyperframes/dist/skills/hyperframes/references/frame-worker-core.md +80 -0
  284. package/vendor/hyperframes/dist/skills/hyperframes/references/intent-interview.md +73 -0
  285. package/vendor/hyperframes/dist/skills/hyperframes/references/pitch-round.md +40 -0
  286. package/vendor/hyperframes/dist/skills/hyperframes/references/plugin-installation.md +43 -0
  287. package/vendor/hyperframes/dist/skills/hyperframes/references/production-loop.md +26 -0
  288. package/vendor/hyperframes/dist/skills/hyperframes/references/review-loop.md +37 -0
  289. package/vendor/hyperframes/dist/skills/hyperframes/references/route-briefs.md +11 -0
  290. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/embedded-captions.md +11 -0
  291. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/faceless-explainer.md +12 -0
  292. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/general-video.md +12 -0
  293. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/motion-graphics.md +11 -0
  294. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/music-to-video.md +12 -0
  295. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/pr-to-video.md +28 -0
  296. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/product-launch-video.md +13 -0
  297. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/remotion-to-hyperframes.md +9 -0
  298. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/slideshow.md +11 -0
  299. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/talking-head-recut.md +11 -0
  300. package/vendor/hyperframes/dist/skills/hyperframes/references/script-format.md +52 -0
  301. package/vendor/hyperframes/dist/skills/hyperframes/references/skill-lifecycle.md +35 -0
  302. package/vendor/hyperframes/dist/skills/hyperframes/references/storyboard-format.md +99 -0
  303. package/vendor/hyperframes/dist/skills/hyperframes/references/subagent-dispatch.md +35 -0
  304. package/vendor/hyperframes/dist/skills/hyperframes/references/workflow-catalog.md +10 -0
  305. package/vendor/hyperframes/dist/skills/hyperframes/scripts/lib/frame-packets-core.mjs +194 -0
  306. package/vendor/hyperframes/dist/skills/hyperframes/scripts/plugin-cli.mjs +88 -0
  307. package/vendor/hyperframes/dist/skills/hyperframes/scripts/plugin-cli.test.mjs +117 -0
  308. package/vendor/hyperframes/dist/skills/hyperframes-cli/SKILL.md +189 -0
  309. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/beats.md +19 -0
  310. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/cloud.md +163 -0
  311. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/cloudrun.md +62 -0
  312. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/compare-and-batch.md +105 -0
  313. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/doctor-browser.md +57 -0
  314. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/init-and-scaffold.md +74 -0
  315. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/lambda.md +185 -0
  316. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +132 -0
  317. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/preview-render.md +193 -0
  318. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +134 -0
  319. package/vendor/hyperframes/dist/skills/media-use/SKILL.md +100 -0
  320. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/CREDITS.md +35 -0
  321. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/chime.mp3 +0 -0
  322. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/click-soft.mp3 +0 -0
  323. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/click.mp3 +0 -0
  324. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/error.mp3 +0 -0
  325. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-1.mp3 +0 -0
  326. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-2.mp3 +0 -0
  327. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-3.mp3 +0 -0
  328. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/impact-bass-1.mp3 +0 -0
  329. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/impact-bass-2.mp3 +0 -0
  330. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/key-press.mp3 +0 -0
  331. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/manifest.json +97 -0
  332. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/notification.mp3 +0 -0
  333. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/ping.mp3 +0 -0
  334. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/pop.mp3 +0 -0
  335. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/riser.mp3 +0 -0
  336. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/sparkle.mp3 +0 -0
  337. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/typing.mp3 +0 -0
  338. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh-cinematic.mp3 +0 -0
  339. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh-short.mp3 +0 -0
  340. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh.mp3 +0 -0
  341. package/vendor/hyperframes/dist/skills/media-use/audio/references/bgm.md +76 -0
  342. package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/authoring.md +163 -0
  343. package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/motion.md +87 -0
  344. package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/transcript-handling.md +97 -0
  345. package/vendor/hyperframes/dist/skills/media-use/audio/references/remove-background.md +143 -0
  346. package/vendor/hyperframes/dist/skills/media-use/audio/references/requirements.md +29 -0
  347. package/vendor/hyperframes/dist/skills/media-use/audio/references/sfx.md +42 -0
  348. package/vendor/hyperframes/dist/skills/media-use/audio/references/transcribe.md +52 -0
  349. package/vendor/hyperframes/dist/skills/media-use/audio/references/tts-to-captions.md +35 -0
  350. package/vendor/hyperframes/dist/skills/media-use/audio/references/tts.md +260 -0
  351. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/audio.mjs +311 -0
  352. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/audio.test.mjs +159 -0
  353. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/gemini-pipeline.test.mjs +131 -0
  354. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-tts.mjs +122 -0
  355. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-tts.test.mjs +38 -0
  356. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-voice.mjs +98 -0
  357. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-voice.test.mjs +233 -0
  358. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/audio-meta.mjs +39 -0
  359. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/audio-meta.test.mjs +136 -0
  360. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm-volume.mjs +4 -0
  361. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm.mjs +257 -0
  362. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm.test.mjs +74 -0
  363. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/concurrency.mjs +14 -0
  364. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/concurrency.test.mjs +41 -0
  365. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.mjs +43 -0
  366. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.py +52 -0
  367. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.test.mjs +86 -0
  368. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth_test.py +90 -0
  369. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-tts.mjs +122 -0
  370. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-tts.test.mjs +243 -0
  371. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/heygen.mjs +197 -0
  372. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/heygen.test.mjs +185 -0
  373. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/media-record.mjs +114 -0
  374. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/media-record.test.mjs +205 -0
  375. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/python.mjs +77 -0
  376. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/python.test.mjs +136 -0
  377. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/sfx.mjs +165 -0
  378. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/sfx.test.mjs +121 -0
  379. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.mjs +389 -0
  380. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.spawn.test.mjs +158 -0
  381. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.test.mjs +230 -0
  382. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lyria-recipe.py +136 -0
  383. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/wait-bgm.mjs +175 -0
  384. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/wait-bgm.test.mjs +108 -0
  385. package/vendor/hyperframes/dist/skills/media-use/luts/README.md +28 -0
  386. package/vendor/hyperframes/dist/skills/media-use/luts/index.json +57 -0
  387. package/vendor/hyperframes/dist/skills/media-use/references/audio.md +20 -0
  388. package/vendor/hyperframes/dist/skills/media-use/references/grading.md +160 -0
  389. package/vendor/hyperframes/dist/skills/media-use/references/media-treatment-recipes.md +929 -0
  390. package/vendor/hyperframes/dist/skills/media-use/references/media-treatments.md +202 -0
  391. package/vendor/hyperframes/dist/skills/media-use/references/memory.md +37 -0
  392. package/vendor/hyperframes/dist/skills/media-use/references/meta.md +61 -0
  393. package/vendor/hyperframes/dist/skills/media-use/references/operations.md +327 -0
  394. package/vendor/hyperframes/dist/skills/media-use/references/resolve.md +150 -0
  395. package/vendor/hyperframes/dist/skills/media-use/references/setup-providers.md +80 -0
  396. package/vendor/hyperframes/dist/skills/media-use/references/telemetry-dashboard.md +49 -0
  397. package/vendor/hyperframes/dist/skills/media-use/scripts/audio-duck.mjs +113 -0
  398. package/vendor/hyperframes/dist/skills/media-use/scripts/compatibility.test.mjs +96 -0
  399. package/vendor/hyperframes/dist/skills/media-use/scripts/dither.mjs +328 -0
  400. package/vendor/hyperframes/dist/skills/media-use/scripts/dither.test.mjs +176 -0
  401. package/vendor/hyperframes/dist/skills/media-use/scripts/eval.mjs +369 -0
  402. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/adopt.mjs +128 -0
  403. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/adopt.test.mjs +95 -0
  404. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bgm-provider.mjs +20 -0
  405. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/brand-provider.mjs +59 -0
  406. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bundled-sfx-provider.mjs +119 -0
  407. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bundled-sfx-provider.test.mjs +139 -0
  408. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cache.mjs +148 -0
  409. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/candidates.mjs +91 -0
  410. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/candidates.test.mjs +155 -0
  411. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/codex-provider.mjs +161 -0
  412. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/codex-provider.test.mjs +34 -0
  413. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.d.mts +3 -0
  414. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.mjs +45 -0
  415. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.test.mjs +79 -0
  416. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/coverage.test.mjs +136 -0
  417. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-build.mjs +181 -0
  418. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-build.test.mjs +80 -0
  419. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-validate.mjs +198 -0
  420. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-validate.test.mjs +125 -0
  421. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cutlist.mjs +184 -0
  422. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cutlist.test.mjs +162 -0
  423. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/duck.mjs +95 -0
  424. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/duck.test.mjs +153 -0
  425. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/error-diffusion.mjs +230 -0
  426. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/error-diffusion.test.mjs +102 -0
  427. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ff-binaries.mjs +37 -0
  428. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/freeze.mjs +72 -0
  429. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/freeze.test.mjs +138 -0
  430. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/grade-analyzer.mjs +265 -0
  431. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/grade-analyzer.test.mjs +285 -0
  432. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-cli.mjs +191 -0
  433. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-cli.test.mjs +301 -0
  434. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-search.mjs +45 -0
  435. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-search.test.mjs +49 -0
  436. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-video-provider.mjs +138 -0
  437. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-video-provider.test.mjs +435 -0
  438. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/image-provider.mjs +44 -0
  439. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/index-gen.mjs +63 -0
  440. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-media-search.mjs +32 -0
  441. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-models.mjs +318 -0
  442. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-models.test.mjs +220 -0
  443. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-run.mjs +78 -0
  444. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-run.test.mjs +121 -0
  445. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/logo-provider.mjs +244 -0
  446. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/logo-provider.test.mjs +298 -0
  447. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ltx-video-provider.mjs +94 -0
  448. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ltx-video-provider.test.mjs +316 -0
  449. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/lut-preset-provider.mjs +271 -0
  450. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/lut-preset-provider.test.mjs +199 -0
  451. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.d.mts +19 -0
  452. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.mjs +279 -0
  453. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.test.mjs +397 -0
  454. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/match.mjs +47 -0
  455. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-fetch.mjs +85 -0
  456. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-fetch.test.mjs +197 -0
  457. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-home.mjs +20 -0
  458. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-home.test.mjs +61 -0
  459. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-search.d.mts +9 -0
  460. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-search.mjs +107 -0
  461. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/mflux-provider.mjs +128 -0
  462. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/mflux-provider.test.mjs +174 -0
  463. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/misses.mjs +49 -0
  464. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/misses.test.mjs +89 -0
  465. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/npx-sync.mjs +31 -0
  466. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/npx-sync.test.mjs +50 -0
  467. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/parakeet-words.mjs +27 -0
  468. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/parakeet-words.test.mjs +44 -0
  469. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/prefs-store.mjs +180 -0
  470. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/prefs-store.test.mjs +189 -0
  471. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/probe.mjs +41 -0
  472. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/probe.test.mjs +148 -0
  473. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/providers.mjs +5 -0
  474. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/recipe-store.mjs +367 -0
  475. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/recipe-store.test.mjs +367 -0
  476. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/registry.mjs +212 -0
  477. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/registry.test.mjs +262 -0
  478. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/search.mjs +24 -0
  479. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/search.test.mjs +32 -0
  480. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/sfx-provider.mjs +23 -0
  481. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/specs.mjs +132 -0
  482. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/specs.test.mjs +157 -0
  483. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/stats.mjs +117 -0
  484. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/stats.test.mjs +165 -0
  485. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/svg-sanitize.mjs +21 -0
  486. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/telemetry.mjs +210 -0
  487. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/telemetry.test.mjs +437 -0
  488. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/test-home.test.mjs +10 -0
  489. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/transcriptCutFade.mjs +21 -0
  490. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/transcriptCutFade.test.mjs +33 -0
  491. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/tts-local-provider.mjs +94 -0
  492. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/tts-local-provider.test.mjs +72 -0
  493. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/usage.mjs +57 -0
  494. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/usage.test.mjs +54 -0
  495. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/voice-provider.mjs +57 -0
  496. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/voice-provider.test.mjs +46 -0
  497. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/words.mjs +18 -0
  498. package/vendor/hyperframes/dist/skills/media-use/scripts/prefs.mjs +70 -0
  499. package/vendor/hyperframes/dist/skills/media-use/scripts/recipe.mjs +103 -0
  500. package/vendor/hyperframes/dist/skills/media-use/scripts/resolve-plugin.test.mjs +62 -0
  501. package/vendor/hyperframes/dist/skills/media-use/scripts/resolve.mjs +1369 -0
  502. package/vendor/hyperframes/dist/skills/media-use/scripts/transcribe.mjs +194 -0
  503. package/vendor/hyperframes/dist/skills/media-use/scripts/transcribe.test.mjs +112 -0
  504. package/vendor/hyperframes/dist/skills/media-use/scripts/transcript-cut.mjs +270 -0
  505. package/vendor/hyperframes/dist/skills/media-use/scripts/transcript-cut.test.mjs +117 -0
  506. package/vendor/hyperframes/dist/skills-MJ2J4GEM.js +808 -0
  507. package/vendor/hyperframes/dist/skillsUpdateCheck-TKTYQN5R.js +26 -0
  508. package/vendor/hyperframes/dist/slideshow-EJ4IMY6P.js +24 -0
  509. package/vendor/hyperframes/dist/snapshot-KIVDUUMN.js +875 -0
  510. package/vendor/hyperframes/dist/src-6YQBJGWR.js +202 -0
  511. package/vendor/hyperframes/dist/src-PVYUYV3M.js +471 -0
  512. package/vendor/hyperframes/dist/state-KAXGHF77.js +26 -0
  513. package/vendor/hyperframes/dist/staticProjectServer-7EU666GS.js +49 -0
  514. package/vendor/hyperframes/dist/status-YM52BQ6S.js +311 -0
  515. package/vendor/hyperframes/dist/studio/assets/hyperframes-player-Cp8e_Zst.js +473 -0
  516. package/vendor/hyperframes/dist/studio/assets/index-BX3KHhGX.js +71 -0
  517. package/vendor/hyperframes/dist/studio/assets/index-CASEBNy2.js +1 -0
  518. package/vendor/hyperframes/dist/studio/assets/index-D11atkBt.css +1 -0
  519. package/vendor/hyperframes/dist/studio/assets/index-DMTt9nTf.js +531 -0
  520. package/vendor/hyperframes/dist/studio/assets/index-oE1pOdAy.js +399 -0
  521. package/vendor/hyperframes/dist/studio/chunk-5VSXRGIX.js +948 -0
  522. package/vendor/hyperframes/dist/studio/chunk-5VSXRGIX.js.map +1 -0
  523. package/vendor/hyperframes/dist/studio/chunk-7UQWVN52.js +938 -0
  524. package/vendor/hyperframes/dist/studio/chunk-7UQWVN52.js.map +1 -0
  525. package/vendor/hyperframes/dist/studio/chunk-EEXSYY5F.js +190 -0
  526. package/vendor/hyperframes/dist/studio/chunk-EEXSYY5F.js.map +1 -0
  527. package/vendor/hyperframes/dist/studio/chunk-FOEID72M.js +1441 -0
  528. package/vendor/hyperframes/dist/studio/chunk-FOEID72M.js.map +1 -0
  529. package/vendor/hyperframes/dist/studio/chunk-PZ5AY32C.js +10 -0
  530. package/vendor/hyperframes/dist/studio/chunk-PZ5AY32C.js.map +1 -0
  531. package/vendor/hyperframes/dist/studio/chunk-TDWGXBUT.js +1103 -0
  532. package/vendor/hyperframes/dist/studio/chunk-TDWGXBUT.js.map +1 -0
  533. package/vendor/hyperframes/dist/studio/domEditingLayers-IEVLO54Z.js +47 -0
  534. package/vendor/hyperframes/dist/studio/domEditingLayers-IEVLO54Z.js.map +1 -0
  535. package/vendor/hyperframes/dist/studio/favicon.svg +14 -0
  536. package/vendor/hyperframes/dist/studio/icons/timeline/audio.svg +7 -0
  537. package/vendor/hyperframes/dist/studio/icons/timeline/captions.svg +5 -0
  538. package/vendor/hyperframes/dist/studio/icons/timeline/composition.svg +12 -0
  539. package/vendor/hyperframes/dist/studio/icons/timeline/image.svg +18 -0
  540. package/vendor/hyperframes/dist/studio/icons/timeline/music.svg +10 -0
  541. package/vendor/hyperframes/dist/studio/icons/timeline/text.svg +3 -0
  542. package/vendor/hyperframes/dist/studio/index.css +165 -0
  543. package/vendor/hyperframes/dist/studio/index.css.map +1 -0
  544. package/vendor/hyperframes/dist/studio/index.d.ts +4296 -0
  545. package/vendor/hyperframes/dist/studio/index.html +23 -0
  546. package/vendor/hyperframes/dist/studio/index.js +99693 -0
  547. package/vendor/hyperframes/dist/studio/index.js.map +1 -0
  548. package/vendor/hyperframes/dist/studio/player.d.ts +30 -0
  549. package/vendor/hyperframes/dist/studio/player.js +10 -0
  550. package/vendor/hyperframes/dist/studio/player.js.map +1 -0
  551. package/vendor/hyperframes/dist/studio/styles/tailwind-preset.d.ts +39 -0
  552. package/vendor/hyperframes/dist/studio/styles/tailwind-preset.js +50 -0
  553. package/vendor/hyperframes/dist/studio/styles/tailwind-preset.js.map +1 -0
  554. package/vendor/hyperframes/dist/studio/styles.css +1 -0
  555. package/vendor/hyperframes/dist/studio/ui.d.ts +296 -0
  556. package/vendor/hyperframes/dist/studio/ui.js +66 -0
  557. package/vendor/hyperframes/dist/studio/ui.js.map +1 -0
  558. package/vendor/hyperframes/dist/studio-api-PNQZRPX5.js +136 -0
  559. package/vendor/hyperframes/dist/studioSelectionClient-IUUPKUHZ.js +25 -0
  560. package/vendor/hyperframes/dist/studioServer-UWRBPIOJ.js +1457 -0
  561. package/vendor/hyperframes/dist/synthesize-K62TIZWI.js +182 -0
  562. package/vendor/hyperframes/dist/system-EZYZNUFD.js +44 -0
  563. package/vendor/hyperframes/dist/telemetry-2YC4SGQU.js +144 -0
  564. package/vendor/hyperframes/dist/telemetry-QMYM4WME.js +95 -0
  565. package/vendor/hyperframes/dist/templates/_shared/AGENTS.md +107 -0
  566. package/vendor/hyperframes/dist/templates/_shared/CLAUDE.md +107 -0
  567. package/vendor/hyperframes/dist/templates/blank/index.html +55 -0
  568. package/vendor/hyperframes/dist/templates/from-file/index.html +75 -0
  569. package/vendor/hyperframes/dist/templates/warm-grain/compositions/captions.html +154 -0
  570. package/vendor/hyperframes/dist/templates/warm-grain/compositions/graphics.html +162 -0
  571. package/vendor/hyperframes/dist/templates/warm-grain/compositions/intro.html +87 -0
  572. package/vendor/hyperframes/dist/templates/warm-grain/index.html +264 -0
  573. package/vendor/hyperframes/dist/templates/warm-grain/registry-item.json +34 -0
  574. package/vendor/hyperframes/dist/timeline-77Z3BBQM.js +1377 -0
  575. package/vendor/hyperframes/dist/tokens-OBGTYE4Z.js +92 -0
  576. package/vendor/hyperframes/dist/transcribe-7NVFHCGA.js +387 -0
  577. package/vendor/hyperframes/dist/transcribe-BNSJRR4M.js +62 -0
  578. package/vendor/hyperframes/dist/tts-P3LIPIL5.js +234 -0
  579. package/vendor/hyperframes/dist/updateCheck-UDWIJ4ZQ.js +39 -0
  580. package/vendor/hyperframes/dist/upgrade-CT3CPO3E.js +231 -0
  581. package/vendor/hyperframes/dist/urlDownloader-H6WRI2UE.js +39 -0
  582. package/vendor/hyperframes/dist/usage-EC3KFUIJ.js +2139 -0
  583. package/vendor/hyperframes/dist/validate-65QDZJWZ.js +70 -0
  584. package/vendor/hyperframes/dist/video-FGSGKRSV.js +261 -0
  585. package/vendor/hyperframes/dist/workspaceBuildCheck-TOLGAI4T.js +133 -0
  586. package/vendor/hyperframes/package.json +80 -0
@@ -0,0 +1,33 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { fadeFilterFor } from "./transcriptCutFade.mjs";
4
+
5
+ test("fades in only at the first segment's trailing splice", () => {
6
+ assert.equal(fadeFilterFor(2, { fadeIn: false, fadeOut: true }), "afade=t=out:st=1.97:d=0.03");
7
+ });
8
+
9
+ test("fades both edges of a middle segment's two splices", () => {
10
+ assert.equal(
11
+ fadeFilterFor(2, { fadeIn: true, fadeOut: true }),
12
+ "afade=t=in:st=0:d=0.03,afade=t=out:st=1.97:d=0.03",
13
+ );
14
+ });
15
+
16
+ test("fades out only at the last segment's leading splice", () => {
17
+ assert.equal(fadeFilterFor(2, { fadeIn: true, fadeOut: false }), "afade=t=in:st=0:d=0.03");
18
+ });
19
+
20
+ test("a single kept segment borders no splice at all", () => {
21
+ assert.equal(fadeFilterFor(2, { fadeIn: false, fadeOut: false }), null);
22
+ });
23
+
24
+ test("still scales the ramp down on a short segment with both edges faded", () => {
25
+ assert.equal(
26
+ fadeFilterFor(0.08, { fadeIn: true, fadeOut: true }),
27
+ "afade=t=in:st=0:d=0.02,afade=t=out:st=0.06:d=0.02",
28
+ );
29
+ });
30
+
31
+ test("skips a degenerate segment even when a splice is requested", () => {
32
+ assert.equal(fadeFilterFor(0.005, { fadeIn: true, fadeOut: true }), null);
33
+ });
@@ -0,0 +1,94 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { existsSync, statSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { ffprobeBinary } from "./ff-binaries.mjs";
6
+ import { resolveSpawnCommand } from "../../audio/scripts/lib/tts.mjs";
7
+
8
+ // Local voiceover via the packaged Kokoro-82M TTS (the `hyperframes tts` CLI),
9
+ // the free/private default now that HeyGen TTS costs wallet credits. Kokoro runs
10
+ // on-device (CPU, faster-than-realtime, bundled voices, native word timestamps),
11
+ // so no key and no per-call charge. When Kokoro is not set up, this returns null
12
+ // and the registry falls through to the HeyGen TTS upsell.
13
+ //
14
+ // Delegated to the hyperframes CLI (same as transcribe / remove-background), not
15
+ // re-implemented here. ffprobe reads the duration back for the ledger.
16
+
17
+ function probeDurationSeconds(ffprobe, file) {
18
+ try {
19
+ const out = execFileSync(
20
+ ffprobe,
21
+ ["-v", "error", "-show_entries", "format=duration", "-of", "csv=p=0", "--", file],
22
+ { encoding: "utf8", timeout: 15000 },
23
+ );
24
+ const d = parseFloat(String(out).trim());
25
+ return Number.isFinite(d) ? d : undefined;
26
+ } catch {
27
+ return undefined;
28
+ }
29
+ }
30
+
31
+ // `platform`/`execFn`/`env`/`pathExists` params (defaulting to the real
32
+ // values) exist so tests can exercise the win32 branch without mocking
33
+ // node:child_process (its ESM exports are non-configurable) — same idiom as
34
+ // spawnP in ../../audio/scripts/lib/tts.mjs.
35
+ export async function localTtsGenerate(
36
+ intent,
37
+ ctx,
38
+ platform = process.platform,
39
+ execFn = execFileSync,
40
+ env = process.env,
41
+ pathExists = existsSync,
42
+ ) {
43
+ const ffprobe = ffprobeBinary();
44
+ const outPath = join(tmpdir(), `media-use-kokoro-${process.pid}-${Date.now()}.wav`);
45
+ const argv = ["hyperframes", "tts", intent, "--output", outPath];
46
+ if (ctx?.voice) argv.push("--voice", ctx.voice);
47
+ if (ctx?.lang && ctx.lang !== "en") argv.push("--lang", ctx.lang);
48
+ // On Windows a bare "npx" is npx.cmd, which execFileSync cannot exec
49
+ // (spawnSync npx ENOENT) — resolveSpawnCommand reroutes it through
50
+ // node + npx-cli.js, same as the audio engine's TTS spawns.
51
+ const resolved = resolveSpawnCommand(
52
+ "npx",
53
+ argv,
54
+ { encoding: "utf8", timeout: 300000, stdio: ["ignore", "pipe", "pipe"] },
55
+ platform,
56
+ env,
57
+ pathExists,
58
+ );
59
+ if (!resolved) {
60
+ // npx-on-win32 with no resolvable npx-cli.js — same terminal condition
61
+ // spawnP warns about. Fall through to the next provider rather than crash.
62
+ console.error(
63
+ "media-use: local voice not enabled (kokoro). Cannot run npx on Windows: " +
64
+ "npm's npx-cli.js was not found (install npm with Node, or run via npx/npm run so npm_execpath is set).",
65
+ );
66
+ return null;
67
+ }
68
+ try {
69
+ execFn(resolved.cmd, resolved.args, resolved.opts);
70
+ } catch (err) {
71
+ // `hyperframes tts` prints its "kokoro-onnx not installed" hint to stdout
72
+ // (clack UI), so read both streams and surface the actionable enable-command
73
+ // rather than a bare "Command failed": otherwise resolve silently falls
74
+ // through to the PAID HeyGen TTS upsell when free local voice was one pip away.
75
+ const out = `${err.stdout?.toString() ?? ""}${err.stderr?.toString() ?? ""}`.trim();
76
+ const hint = /not installed|pip install kokoro/i.test(out)
77
+ ? "install for free on-device voice: pip install kokoro-onnx soundfile (or set HYPERFRAMES_PYTHON to a venv that has it)"
78
+ : out.slice(-200) || err.message;
79
+ console.error(`media-use: local voice not enabled (kokoro). ${hint}`);
80
+ return null;
81
+ }
82
+ if (!existsSync(outPath) || statSync(outPath).size === 0) return null;
83
+ return {
84
+ localPath: outPath,
85
+ ext: ".wav",
86
+ source: "generated",
87
+ metadata: {
88
+ description: intent,
89
+ provider: "kokoro.local",
90
+ duration: probeDurationSeconds(ffprobe, outPath),
91
+ provenance: { engine: "kokoro-82m", prompt: intent },
92
+ },
93
+ };
94
+ }
@@ -0,0 +1,72 @@
1
+ import { test } from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { localTtsGenerate } from "./tts-local-provider.mjs";
4
+
5
+ // Regression: on Windows, a bare "npx" is npx.cmd, which execFileSync cannot
6
+ // exec — the Kokoro delegation failed with `spawnSync npx ENOENT` instead of
7
+ // synthesizing (or cleanly falling through to the next provider). The spawn
8
+ // must route through node + npx-cli.js on win32, same as the audio engine's
9
+ // TTS spawns (see ../../audio/scripts/lib/tts.spawn.test.mjs).
10
+
11
+ const envWithNpxCli = {
12
+ npm_execpath: "C:/Program Files/nodejs/node_modules/npm/bin/npm-cli.js",
13
+ npm_node_execpath: "C:/Program Files/nodejs/node.exe",
14
+ };
15
+ const npxCliPath = "C:/Program Files/nodejs/node_modules/npm/bin/npx-cli.js";
16
+ const pathExists = (path) => path === npxCliPath;
17
+
18
+ test("win32: routes the hyperframes tts call through node + npx-cli, never bare npx", async () => {
19
+ const captured = [];
20
+ const fakeExec = (cmd, args, opts) => {
21
+ captured.push({ cmd, args, opts });
22
+ // Synthesize nothing — the provider then returns null via the
23
+ // missing-output check, which is fine: we only assert the spawn shape.
24
+ };
25
+
26
+ await localTtsGenerate(
27
+ "hello there",
28
+ { voice: "am_michael" },
29
+ "win32",
30
+ fakeExec,
31
+ envWithNpxCli,
32
+ pathExists,
33
+ );
34
+
35
+ assert.equal(captured.length, 1);
36
+ assert.equal(captured[0].cmd, envWithNpxCli.npm_node_execpath);
37
+ assert.equal(captured[0].args[0], npxCliPath);
38
+ assert.deepEqual(captured[0].args.slice(1, 4), ["hyperframes", "tts", "hello there"]);
39
+ assert.ok(captured[0].args.includes("--voice"));
40
+ // execFileSync options survive the rerouting (pipes are what let the caller
41
+ // read the "kokoro-onnx not installed" hint back out).
42
+ assert.deepEqual(captured[0].opts.stdio, ["ignore", "pipe", "pipe"]);
43
+ });
44
+
45
+ test("win32 without a resolvable npx-cli: falls through to the next provider (null), no spawn", async () => {
46
+ const captured = [];
47
+ const fakeExec = (...call) => captured.push(call);
48
+
49
+ const result = await localTtsGenerate(
50
+ "hello",
51
+ {},
52
+ "win32",
53
+ fakeExec,
54
+ {}, // no npm_execpath, and pathExists finds nothing
55
+ () => false,
56
+ );
57
+
58
+ assert.equal(result, null);
59
+ assert.equal(captured.length, 0);
60
+ });
61
+
62
+ test("non-win32: spawns plain npx unchanged", async () => {
63
+ const captured = [];
64
+ const fakeExec = (cmd, args) => captured.push({ cmd, args });
65
+
66
+ await localTtsGenerate("hola", { lang: "es" }, "darwin", fakeExec, {}, () => false);
67
+
68
+ assert.equal(captured.length, 1);
69
+ assert.equal(captured[0].cmd, "npx");
70
+ assert.deepEqual(captured[0].args.slice(0, 3), ["hyperframes", "tts", "hola"]);
71
+ assert.ok(captured[0].args.includes("--lang"));
72
+ });
@@ -0,0 +1,57 @@
1
+ import { readFileSync, readdirSync, existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+
4
+ // Asset in-use detection: which manifest assets are actually referenced by the
5
+ // project's compositions. Answers "is this safe to prune?" from the CLI. (The
6
+ // Studio Asset tab computes its in-use filter separately from the live timeline;
7
+ // this is the skill-side equivalent for headless use.)
8
+ //
9
+ // ponytail: substring match of each asset's filename against the .html text
10
+ // (covers src= / href= / url() / data-* without parsing HTML). False positives
11
+ // only if a filename literally appears in prose; fine for a filter. Upgrade to
12
+ // attribute parsing if that ever bites.
13
+
14
+ function compositionHtml(projectDir) {
15
+ let files = [];
16
+ try {
17
+ files = readdirSync(projectDir).filter((f) => f.endsWith(".html"));
18
+ } catch {
19
+ return "";
20
+ }
21
+ const sub = join(projectDir, "compositions");
22
+ if (existsSync(sub)) {
23
+ try {
24
+ for (const f of readdirSync(sub))
25
+ if (f.endsWith(".html")) files.push(join("compositions", f));
26
+ } catch {
27
+ // ignore unreadable subdir
28
+ }
29
+ }
30
+ return files
31
+ .map((f) => {
32
+ try {
33
+ return readFileSync(join(projectDir, f), "utf8");
34
+ } catch {
35
+ return "";
36
+ }
37
+ })
38
+ .join("\n");
39
+ }
40
+
41
+ /** Tag each record with `inUse` (referenced by some composition). */
42
+ export function tagUsage(records, projectDir) {
43
+ const html = compositionHtml(projectDir);
44
+ return records.map((r) => {
45
+ const file = r.path ? r.path.split("/").pop() : r.id;
46
+ return { ...r, inUse: Boolean(file) && html.includes(file) };
47
+ });
48
+ }
49
+
50
+ /** Split records into { used, unused } for the filter. */
51
+ export function partitionUsage(records, projectDir) {
52
+ const tagged = tagUsage(records, projectDir);
53
+ return {
54
+ used: tagged.filter((r) => r.inUse),
55
+ unused: tagged.filter((r) => !r.inUse),
56
+ };
57
+ }
@@ -0,0 +1,54 @@
1
+ import { strict as assert } from "node:assert";
2
+ import { test } from "node:test";
3
+ import { mkdtempSync, writeFileSync, rmSync } from "node:fs";
4
+ import { join } from "node:path";
5
+ import { tmpdir } from "node:os";
6
+ import { tagUsage, partitionUsage } from "./usage.mjs";
7
+
8
+ function project(html) {
9
+ const dir = mkdtempSync(join(tmpdir(), "mu-usage-"));
10
+ writeFileSync(join(dir, "index.html"), html);
11
+ return dir;
12
+ }
13
+
14
+ const records = [
15
+ { id: "bgm_001", path: ".media/audio/bgm/bgm_001.wav", description: "used track" },
16
+ { id: "bgm_002", path: ".media/audio/bgm/bgm_002.wav", description: "orphan track" },
17
+ ];
18
+
19
+ test("an asset referenced by a composition is marked in-use", () => {
20
+ const dir = project(`<audio src="assets/bgm_001.wav"></audio>`);
21
+ try {
22
+ const tagged = tagUsage(records, dir);
23
+ assert.equal(tagged.find((r) => r.id === "bgm_001").inUse, true);
24
+ assert.equal(tagged.find((r) => r.id === "bgm_002").inUse, false);
25
+ } finally {
26
+ rmSync(dir, { recursive: true, force: true });
27
+ }
28
+ });
29
+
30
+ test("partitionUsage splits used vs unused for the filter", () => {
31
+ const dir = project(`<img src="bgm_001.wav">`);
32
+ try {
33
+ const { used, unused } = partitionUsage(records, dir);
34
+ assert.deepEqual(
35
+ used.map((r) => r.id),
36
+ ["bgm_001"],
37
+ );
38
+ assert.deepEqual(
39
+ unused.map((r) => r.id),
40
+ ["bgm_002"],
41
+ );
42
+ } finally {
43
+ rmSync(dir, { recursive: true, force: true });
44
+ }
45
+ });
46
+
47
+ test("no compositions -> everything reads as unused (safe default)", () => {
48
+ const dir = mkdtempSync(join(tmpdir(), "mu-usage-"));
49
+ try {
50
+ assert.equal(partitionUsage(records, dir).used.length, 0);
51
+ } finally {
52
+ rmSync(dir, { recursive: true, force: true });
53
+ }
54
+ });
@@ -0,0 +1,57 @@
1
+ import { HEYGEN_CLIENT_SOURCE_ARGV, runHeygenJson } from "./heygen-cli.mjs";
2
+
3
+ // Voice / TTS generation via the HeyGen CLI — the only external CLI media-use
4
+ // shells (CLI-only invariant: media-use holds no keys; the CLI owns auth).
5
+ // Flags verified against `heygen voice speech create --help` (v0.3.0).
6
+
7
+ function result(url, duration, provider, intent) {
8
+ if (!url) return null;
9
+ return {
10
+ url,
11
+ source: "generated",
12
+ metadata: {
13
+ description: intent,
14
+ provider,
15
+ ...(duration != null && { duration }),
16
+ provenance: { prompt: intent },
17
+ },
18
+ };
19
+ }
20
+
21
+ // HeyGen TTS requires a starfish-engine voice. Default to the first one the
22
+ // catalog returns (deterministic order); pass ctx.voiceId to override.
23
+ // ponytail: listed once per process; the resolved asset is frozen + cached after
24
+ // first use, so the network list only happens on a cache miss. Cache only a
25
+ // truthy id -- a transient list failure must not poison the cache with `null`
26
+ // and permanently disable TTS for the rest of the process.
27
+ let cachedVoiceId;
28
+ function defaultVoiceId() {
29
+ if (cachedVoiceId) return cachedVoiceId;
30
+ const j = runHeygenJson(
31
+ "heygen",
32
+ ["voice", "list", "--engine", "starfish", "--limit", "1"],
33
+ "voice list",
34
+ );
35
+ cachedVoiceId = j?.data?.[0]?.voice_id || null;
36
+ return cachedVoiceId;
37
+ }
38
+
39
+ export async function heygenTtsGenerate(intent, ctx) {
40
+ const voiceId = ctx?.voiceId || defaultVoiceId();
41
+ if (!voiceId) return null;
42
+ const p = runHeygenJson(
43
+ "heygen",
44
+ [
45
+ ...HEYGEN_CLIENT_SOURCE_ARGV,
46
+ "voice",
47
+ "speech",
48
+ "create",
49
+ "--text",
50
+ intent,
51
+ "--voice-id",
52
+ voiceId,
53
+ ],
54
+ "tts",
55
+ );
56
+ return result(p?.data?.audio_url, p?.data?.duration, "heygen.tts", intent);
57
+ }
@@ -0,0 +1,46 @@
1
+ import { strict as assert } from "node:assert";
2
+ import { chmodSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { test } from "node:test";
6
+ import { heygenTtsGenerate } from "./voice-provider.mjs";
7
+
8
+ test("tags TTS generation but not voice discovery with the media-use client source", async () => {
9
+ const dir = mkdtempSync(join(tmpdir(), "media-use-voice-provider-"));
10
+ const capturePath = join(dir, "argv.log");
11
+ const heygenPath = join(dir, "heygen");
12
+ const previousPath = process.env.PATH;
13
+ const previousCapturePath = process.env.HEYGEN_CAPTURE_PATH;
14
+
15
+ writeFileSync(
16
+ heygenPath,
17
+ `#!/bin/sh
18
+ printf '%s\\n' "$*" >> "$HEYGEN_CAPTURE_PATH"
19
+ case "$*" in
20
+ *"voice list"*) printf '%s\\n' '{"data":[{"voice_id":"voice-123"}]}' ;;
21
+ *"voice speech create"*) printf '%s\\n' '{"data":{"audio_url":"https://example.com/voice.mp3","duration":1.5}}' ;;
22
+ esac
23
+ `,
24
+ );
25
+ chmodSync(heygenPath, 0o755);
26
+ process.env.PATH = `${dir}:${previousPath ?? ""}`;
27
+ process.env.HEYGEN_CAPTURE_PATH = capturePath;
28
+
29
+ try {
30
+ const result = await heygenTtsGenerate("Hello from media-use", {});
31
+ const invocations = readFileSync(capturePath, "utf8").trim().split("\n");
32
+
33
+ assert.equal(invocations.length, 2);
34
+ assert.match(invocations[0], /^voice list /);
35
+ assert.doesNotMatch(invocations[0], /X-HeyGen-Client-Source/);
36
+ assert.match(invocations[1], /voice speech create/);
37
+ assert.match(invocations[1], /X-HeyGen-Client-Source: media-use/);
38
+ assert.equal(result?.url, "https://example.com/voice.mp3");
39
+ } finally {
40
+ if (previousPath === undefined) delete process.env.PATH;
41
+ else process.env.PATH = previousPath;
42
+ if (previousCapturePath === undefined) delete process.env.HEYGEN_CAPTURE_PATH;
43
+ else process.env.HEYGEN_CAPTURE_PATH = previousCapturePath;
44
+ rmSync(dir, { recursive: true, force: true });
45
+ }
46
+ });
@@ -0,0 +1,18 @@
1
+ export function normalizeWords(input) {
2
+ const raw = Array.isArray(input) ? input : Array.isArray(input?.words) ? input.words : [];
3
+ return raw
4
+ .map((w, index) => {
5
+ const text = String(w?.text ?? w?.word ?? "").trim();
6
+ const start = Number(w?.start);
7
+ const end = Number(w?.end);
8
+ if (!text || !Number.isFinite(start) || !Number.isFinite(end)) return null;
9
+ return { id: w?.id ?? `w${index}`, text, start, end };
10
+ })
11
+ .filter(Boolean);
12
+ }
13
+
14
+ export function wordListsFromMediaMeta(input) {
15
+ if (Array.isArray(input) || Array.isArray(input?.words)) return [normalizeWords(input)];
16
+ if (!Array.isArray(input?.voices)) return [];
17
+ return input.voices.map((voice) => normalizeWords(voice)).filter((words) => words.length > 0);
18
+ }
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Remembered defaults CLI — the lightweight tier of HyperFrames user memory.
4
+ *
5
+ * node prefs.mjs get --hyperframes . [--json]
6
+ * Print the merged view (project `.media/preferences.json` over user
7
+ * `~/.media/preferences.json`), each key with its source and the receipt
8
+ * material (confirmed_in, updated_at).
9
+ *
10
+ * node prefs.mjs record --hyperframes . --key destination --value x-feed [--workflow <w>]
11
+ * Record one confirmed brief answer into the project tier; the same value
12
+ * confirmed in two different projects promotes the key to the user tier.
13
+ *
14
+ * Consumption rules live in hyperframes/references/brief-contract.md § 2
15
+ * (Remembered defaults): a remembered value becomes the recommended option
16
+ * with a receipt — it never skips a question.
17
+ */
18
+ import { parseArgs } from "node:util";
19
+ import { mergedPreferences, recordPreference } from "./lib/prefs-store.mjs";
20
+
21
+ const { values: args, positionals } = parseArgs({
22
+ options: {
23
+ hyperframes: { type: "string", default: "." },
24
+ key: { type: "string" },
25
+ value: { type: "string" },
26
+ workflow: { type: "string" },
27
+ json: { type: "boolean", default: false },
28
+ },
29
+ allowPositionals: true,
30
+ });
31
+
32
+ const verb = positionals[0];
33
+
34
+ function fail(message) {
35
+ console.error(message);
36
+ process.exit(1);
37
+ }
38
+
39
+ if (verb === "get") {
40
+ const merged = mergedPreferences(args.hyperframes);
41
+ if (args.json) {
42
+ console.log(JSON.stringify(merged, null, 2));
43
+ } else if (Object.keys(merged).length === 0) {
44
+ console.log("no remembered preferences yet");
45
+ } else {
46
+ for (const [key, entry] of Object.entries(merged)) {
47
+ console.log(
48
+ `${key} = ${entry.value} (${entry.source}; confirmed in ${entry.confirmed_in.join(", ")})`,
49
+ );
50
+ }
51
+ }
52
+ } else if (verb === "record") {
53
+ if (!args.key || !args.value) fail("record needs --key and --value");
54
+ try {
55
+ const result = recordPreference({
56
+ projectDir: args.hyperframes,
57
+ key: args.key,
58
+ value: args.value,
59
+ workflow: args.workflow,
60
+ });
61
+ const promotion = result.promoted ? "; promoted to user tier" : "";
62
+ console.log(`recorded ${result.key} = ${result.value} (project${promotion})`);
63
+ } catch (err) {
64
+ fail(err instanceof Error ? err.message : String(err));
65
+ }
66
+ } else {
67
+ fail(
68
+ "usage: prefs.mjs <get|record> --hyperframes . [--key <k> --value <v> --workflow <w>] [--json]",
69
+ );
70
+ }
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Recipes CLI — the heavyweight tier of HyperFrames user memory.
4
+ *
5
+ * node recipe.mjs freeze --hyperframes . --name <n> [--workflow <w>] [--blocks a,b,c]
6
+ * Freeze the current approved run as a named recipe: frame.md + the
7
+ * storyboard skeleton (structure kept, content blanked) + the brief
8
+ * skeleton (when BRIEF.md exists) + the confirmed brief values.
9
+ * The workflow is read from BRIEF.md; --workflow only covers projects
10
+ * briefed before BRIEF.md existed. Re-freezing the same name bumps the
11
+ * version and archives the old folder as <name>@v<N>. Promotes to
12
+ * ~/.media/recipes/ immediately.
13
+ *
14
+ * node recipe.mjs list --hyperframes . [--workflow <w>] [--json]
15
+ * Two-tier merged listing (project wins), newest approval first.
16
+ *
17
+ * node recipe.mjs use --hyperframes . --name <n> [--json]
18
+ * Adopt a recipe: import it from the user tier if needed, copy its
19
+ * frame.md over the project's, and print the brief values + skeleton path.
20
+ *
21
+ * When recipes are offered/consumed is the review loop's and the intent
22
+ * layer's business — see hyperframes/references/review-loop.md § 4 and
23
+ * the intent layer's recipe check (hyperframes SKILL.md § 4).
24
+ */
25
+ import { parseArgs } from "node:util";
26
+ import { freezeRecipe, listRecipes, useRecipe } from "./lib/recipe-store.mjs";
27
+
28
+ const { values: args, positionals } = parseArgs({
29
+ options: {
30
+ hyperframes: { type: "string", default: "." },
31
+ name: { type: "string" },
32
+ workflow: { type: "string" },
33
+ blocks: { type: "string" },
34
+ json: { type: "boolean", default: false },
35
+ },
36
+ allowPositionals: true,
37
+ });
38
+
39
+ const verb = positionals[0];
40
+
41
+ function fail(message) {
42
+ console.error(message);
43
+ process.exit(1);
44
+ }
45
+
46
+ try {
47
+ if (verb === "freeze") {
48
+ if (!args.name) fail("freeze needs --name");
49
+ const frozen = freezeRecipe({
50
+ projectDir: args.hyperframes,
51
+ name: args.name,
52
+ workflow: args.workflow,
53
+ blocks: args.blocks
54
+ ? args.blocks
55
+ .split(",")
56
+ .map((b) => b.trim())
57
+ .filter(Boolean)
58
+ : undefined,
59
+ });
60
+ if (args.json) console.log(JSON.stringify({ ok: true, ...frozen }));
61
+ else {
62
+ console.log(
63
+ `froze recipe ${frozen.slug} (v${frozen.version}, ${frozen.workflow}) → ${frozen.dir}`,
64
+ );
65
+ if (frozen.workflowOverridden)
66
+ console.log(` (BRIEF.md says "${frozen.workflow}" — the --workflow flag was ignored)`);
67
+ if (!frozen.briefSkeleton)
68
+ console.log(" (no BRIEF.md in the project — brief skeleton skipped)");
69
+ }
70
+ } else if (verb === "list") {
71
+ const list = listRecipes({ projectDir: args.hyperframes, workflow: args.workflow });
72
+ if (args.json) console.log(JSON.stringify(list));
73
+ else if (list.length === 0) console.log("no recipes yet");
74
+ else {
75
+ for (const r of list) {
76
+ console.log(
77
+ `${r.name} v${r.version} ${r.workflow} (${r.source}; approved ${String(r.approved_at ?? "?").slice(0, 10)})`,
78
+ );
79
+ }
80
+ }
81
+ } else if (verb === "use") {
82
+ if (!args.name) fail("use needs --name");
83
+ const used = useRecipe({ projectDir: args.hyperframes, name: args.name });
84
+ if (args.json) console.log(JSON.stringify({ ok: true, ...used }));
85
+ else {
86
+ console.log(
87
+ `using recipe ${used.recipe.name} (v${used.recipe.version}, ${used.recipe.workflow})`,
88
+ );
89
+ console.log(` frame spec → ${used.frameSpecPath} (copied over)`);
90
+ console.log(` storyboard skeleton → ${used.skeletonPath}`);
91
+ if (used.briefSkeletonPath) console.log(` brief skeleton → ${used.briefSkeletonPath}`);
92
+ for (const key of ["destination", "aspect", "language", "voice", "style_preset"]) {
93
+ if (used.recipe[key]) console.log(` ${key}: ${used.recipe[key]}`);
94
+ }
95
+ }
96
+ } else {
97
+ fail(
98
+ "usage: recipe.mjs <freeze|list|use> --hyperframes . [--name <n>] [--workflow <w>] [--blocks a,b] [--json]",
99
+ );
100
+ }
101
+ } catch (err) {
102
+ fail(err instanceof Error ? err.message : String(err));
103
+ }
@@ -0,0 +1,62 @@
1
+ import assert from "node:assert/strict";
2
+ import { spawnSync } from "node:child_process";
3
+ import { copyFileSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
4
+ import { delimiter, join } from "node:path";
5
+ import { tmpdir } from "node:os";
6
+ import { fileURLToPath } from "node:url";
7
+ import { test } from "node:test";
8
+
9
+ test(
10
+ "plugin resolver uses the release CLI without a repository checkout",
11
+ { skip: process.platform === "win32" },
12
+ (t) => {
13
+ const dir = mkdtempSync(join(tmpdir(), "hf-resolve-plugin-"));
14
+ t.after(() => rmSync(dir, { recursive: true, force: true }));
15
+ mkdirSync(join(dir, "lib"));
16
+ for (const file of ["resolve.mjs", "lib/npx-sync.mjs"]) {
17
+ copyFileSync(fileURLToPath(new URL(file, import.meta.url)), join(dir, file));
18
+ }
19
+ writeFileSync(
20
+ join(dir, "npx"),
21
+ `#!${process.execPath}\nconsole.log(JSON.stringify({args:process.argv.slice(2),skip:process.env.HYPERFRAMES_SKIP_SKILLS}));process.exit(7);`,
22
+ { mode: 0o755 },
23
+ );
24
+ const result = spawnSync(process.execPath, [join(dir, "resolve.mjs"), "--intent", "a & b"], {
25
+ cwd: dir,
26
+ encoding: "utf8",
27
+ env: {
28
+ ...process.env,
29
+ PATH: `${dir}${delimiter}${process.env.PATH}`,
30
+ HYPERFRAMES_PLUGIN_VERSION: "1.2.3",
31
+ HYPERFRAMES_SKIP_SKILLS: "1",
32
+ },
33
+ });
34
+ assert.equal(result.status, 7, result.stderr);
35
+ assert.deepEqual(JSON.parse(result.stdout), {
36
+ args: ["--yes", "hyperframes@1.2.3", "media-use", "resolve", "--intent", "a & b"],
37
+ skip: "1",
38
+ });
39
+ },
40
+ );
41
+
42
+ test("helper package override keeps a contributor's local CLI", (t) => {
43
+ const root = mkdtempSync(join(tmpdir(), "hf-resolve-local-"));
44
+ t.after(() => rmSync(root, { recursive: true, force: true }));
45
+ const scripts = join(root, "skills/media-use/scripts");
46
+ mkdirSync(join(scripts, "lib"), { recursive: true });
47
+ mkdirSync(join(root, "packages/cli/dist"), { recursive: true });
48
+ for (const file of ["resolve.mjs", "lib/npx-sync.mjs"]) {
49
+ copyFileSync(fileURLToPath(new URL(file, import.meta.url)), join(scripts, file));
50
+ }
51
+ writeFileSync(join(root, "packages/cli/dist/cli.js"), 'console.log("local-cli");');
52
+ const result = spawnSync(process.execPath, [join(scripts, "resolve.mjs")], {
53
+ encoding: "utf8",
54
+ env: {
55
+ ...process.env,
56
+ HYPERFRAMES_PLUGIN_VERSION: "",
57
+ HYPERFRAMES_SKILL_PKG_VERSION: "0.8.79",
58
+ },
59
+ });
60
+ assert.equal(result.status, 0, result.stderr);
61
+ assert.equal(result.stdout.trim(), "local-cli");
62
+ });