@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,367 @@
1
+ import { strict as assert } from "node:assert";
2
+ import { test } from "node:test";
3
+ import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
4
+ import { tmpdir } from "node:os";
5
+ import { join } from "node:path";
6
+ import {
7
+ freezeRecipe,
8
+ listRecipes,
9
+ skeletonizeBrief,
10
+ skeletonizeStoryboard,
11
+ slugifyRecipeName,
12
+ useRecipe,
13
+ } from "./recipe-store.mjs";
14
+ import { recordPreference } from "./prefs-store.mjs";
15
+
16
+ const STORYBOARD = `---
17
+ format: 1080x1080
18
+ message: "Ship a launch video in an afternoon"
19
+ arc: Hook → Problem → Solution
20
+ audience: indie devs on X
21
+ mode: collaborative
22
+ music: upbeat tech
23
+ ---
24
+
25
+ ## Frame 1 — Hook
26
+
27
+ - scene: Big type punches in
28
+ - duration: 3s
29
+ - transition_in: cut
30
+ - status: animated
31
+ - voiceover: "Ship a launch video in an afternoon."
32
+ - src: compositions/frames/01-hook.html
33
+
34
+ Open cold on the promise. This is the thesis.
35
+
36
+ ## Frame 2 — Proof
37
+
38
+ - duration: 4s
39
+ - transition_in: crossfade
40
+ - status: animated
41
+ - asset_candidates: dashboard.png
42
+ - src: compositions/frames/02-proof.html
43
+
44
+ Real dashboard, real numbers.
45
+ Second prose line to collapse.
46
+
47
+ ## Video direction
48
+
49
+ Punchy, one accent color, hard cuts on the beat.
50
+ `;
51
+
52
+ const BRIEF = `---
53
+ workflow: product-launch-video
54
+ flow: automation
55
+ storyboard: yes
56
+ message: "Ship a launch video in an afternoon"
57
+ audience: indie devs on X
58
+ destination: x-feed
59
+ aspect: 1080x1080
60
+ language: en
61
+ length: 60s
62
+ angle: feature-reveal
63
+ ---
64
+
65
+ ## Intent
66
+
67
+ Sell the afternoon-launch promise to indie devs.
68
+
69
+ ## Assets
70
+
71
+ - public/dashboard.png — the real dashboard, proof beat.
72
+
73
+ ## Notes
74
+
75
+ - No stock-photo aesthetics.
76
+ `;
77
+
78
+ function sandbox() {
79
+ const root = mkdtempSync(join(tmpdir(), "mu-recipes-"));
80
+ const home = join(root, "home");
81
+ const project = join(root, "my-launch");
82
+ mkdirSync(home, { recursive: true });
83
+ mkdirSync(project, { recursive: true });
84
+ writeFileSync(join(project, "frame.md"), "# Frame spec\nbackground: #101014\n");
85
+ writeFileSync(join(project, "STORYBOARD.md"), STORYBOARD);
86
+ process.env.HYPERFRAMES_MEDIA_HOME = home;
87
+ return { root, home, project };
88
+ }
89
+
90
+ function restoreEnv(saved) {
91
+ for (const k of Object.keys(process.env)) if (!(k in saved)) delete process.env[k];
92
+ Object.assign(process.env, saved);
93
+ }
94
+
95
+ function withSandbox(fn) {
96
+ const savedEnv = { ...process.env };
97
+ const box = sandbox();
98
+ try {
99
+ fn(box);
100
+ } finally {
101
+ restoreEnv(savedEnv);
102
+ rmSync(box.root, { recursive: true, force: true });
103
+ }
104
+ }
105
+
106
+ test("slugifyRecipeName normalizes and rejects empty", () => {
107
+ assert.equal(slugifyRecipeName("Weekly Changelog!"), "weekly-changelog");
108
+ assert.equal(slugifyRecipeName(" pr_reveal "), "pr-reveal");
109
+ assert.throws(() => slugifyRecipeName("!!!"));
110
+ });
111
+
112
+ test("skeletonize keeps structure, resets status, blanks content", () => {
113
+ const skeleton = skeletonizeStoryboard(STORYBOARD);
114
+ // Structure kept.
115
+ assert.match(skeleton, /format: 1080x1080/);
116
+ assert.match(skeleton, /arc: Hook → Problem → Solution/);
117
+ assert.match(skeleton, /music: upbeat tech/);
118
+ assert.match(skeleton, /- duration: 3s/);
119
+ assert.match(skeleton, /- src: compositions\/frames\/01-hook\.html/);
120
+ assert.match(skeleton, /## Video direction/);
121
+ assert.match(skeleton, /hard cuts on the beat/);
122
+ // Statuses reset.
123
+ assert.equal((skeleton.match(/- status: outline/g) ?? []).length, 2);
124
+ assert.doesNotMatch(skeleton, /animated/);
125
+ // Content blanked.
126
+ assert.doesNotMatch(skeleton, /message:/);
127
+ assert.doesNotMatch(skeleton, /audience:/);
128
+ assert.doesNotMatch(skeleton, /mode:/);
129
+ assert.doesNotMatch(skeleton, /voiceover/);
130
+ assert.doesNotMatch(skeleton, /asset_candidates/);
131
+ assert.doesNotMatch(skeleton, /thesis/);
132
+ assert.doesNotMatch(skeleton, /Real dashboard/);
133
+ assert.match(skeleton, /<fill in: this video's content for the "Hook" beat/);
134
+ assert.match(skeleton, /<fill in: this video's content for the "Proof" beat/);
135
+ });
136
+
137
+ test("skeletonizeBrief keeps reusable keys, drops run-shape, blanks body sections", () => {
138
+ const skeleton = skeletonizeBrief(BRIEF);
139
+ // Reusable frontmatter kept.
140
+ assert.match(skeleton, /workflow: product-launch-video/);
141
+ assert.match(skeleton, /destination: x-feed/);
142
+ assert.match(skeleton, /aspect: 1080x1080/);
143
+ assert.match(skeleton, /length: 60s/);
144
+ assert.match(skeleton, /angle: feature-reveal/);
145
+ // Run-shape and content keys dropped.
146
+ assert.doesNotMatch(skeleton, /^flow:/m);
147
+ assert.doesNotMatch(skeleton, /^storyboard:/m);
148
+ assert.doesNotMatch(skeleton, /^message:/m);
149
+ assert.doesNotMatch(skeleton, /^audience:/m);
150
+ // Body sections kept as headings, prose blanked to placeholders.
151
+ assert.match(skeleton, /## Intent/);
152
+ assert.match(skeleton, /## Assets/);
153
+ assert.match(skeleton, /<fill in: this video's intent/);
154
+ assert.match(skeleton, /<fill in: this video's assets/);
155
+ assert.doesNotMatch(skeleton, /afternoon-launch promise/);
156
+ assert.doesNotMatch(skeleton, /dashboard\.png/);
157
+ });
158
+
159
+ test("freeze writes the folder, manifest record, and user-tier copy", () => {
160
+ withSandbox(({ project, home }) => {
161
+ recordPreference({ projectDir: project, key: "destination", value: "x-feed" });
162
+ recordPreference({
163
+ projectDir: project,
164
+ key: "style_preset",
165
+ value: "pin-and-paper",
166
+ workflow: "product-launch-video",
167
+ });
168
+ const frozen = freezeRecipe({
169
+ projectDir: project,
170
+ name: "Weekly Launch",
171
+ workflow: "product-launch-video",
172
+ blocks: ["data-chart"],
173
+ });
174
+ assert.equal(frozen.slug, "weekly-launch");
175
+ assert.equal(frozen.version, 1);
176
+
177
+ const dir = join(project, ".media/recipes/weekly-launch");
178
+ const recipe = JSON.parse(readFileSync(join(dir, "recipe.json"), "utf8"));
179
+ assert.equal(recipe.workflow, "product-launch-video");
180
+ assert.equal(recipe.destination, "x-feed");
181
+ assert.equal(recipe.style_preset, "pin-and-paper");
182
+ assert.deepEqual(recipe.blocks, ["data-chart"]);
183
+ assert.ok(existsSync(join(dir, "frame.md")));
184
+ assert.match(readFileSync(join(dir, "storyboard-skeleton.md"), "utf8"), /- status: outline/);
185
+
186
+ const manifest = readFileSync(join(project, ".media/manifest.jsonl"), "utf8");
187
+ assert.match(manifest, /"type":"recipe"/);
188
+ assert.match(manifest, /"entity":"weekly-launch"/);
189
+
190
+ assert.ok(existsSync(join(home, ".media/recipes/weekly-launch/recipe.json")));
191
+ });
192
+ });
193
+
194
+ test("freeze with a BRIEF.md carries the brief skeleton; use hands its path back", () => {
195
+ withSandbox(({ project, root }) => {
196
+ writeFileSync(join(project, "BRIEF.md"), BRIEF);
197
+ const frozen = freezeRecipe({
198
+ projectDir: project,
199
+ name: "promo",
200
+ workflow: "product-launch-video",
201
+ });
202
+ assert.equal(frozen.briefSkeleton, true);
203
+ const skeleton = readFileSync(join(project, ".media/recipes/promo/brief-skeleton.md"), "utf8");
204
+ assert.match(skeleton, /destination: x-feed/);
205
+ assert.doesNotMatch(skeleton, /^flow:/m);
206
+
207
+ const fresh = join(root, "fresh-project");
208
+ mkdirSync(fresh, { recursive: true });
209
+ const used = useRecipe({ projectDir: fresh, name: "promo" });
210
+ assert.equal(used.briefSkeletonPath, ".media/recipes/promo/brief-skeleton.md");
211
+ assert.ok(existsSync(join(fresh, ".media/recipes/promo/brief-skeleton.md")));
212
+ });
213
+ });
214
+
215
+ test("freeze without a BRIEF.md degrades: no skeleton, use returns no path", () => {
216
+ withSandbox(({ project, root }) => {
217
+ const frozen = freezeRecipe({
218
+ projectDir: project,
219
+ name: "promo",
220
+ workflow: "product-launch-video",
221
+ });
222
+ assert.equal(frozen.briefSkeleton, false);
223
+ assert.ok(!existsSync(join(project, ".media/recipes/promo/brief-skeleton.md")));
224
+
225
+ const fresh = join(root, "fresh-project");
226
+ mkdirSync(fresh, { recursive: true });
227
+ const used = useRecipe({ projectDir: fresh, name: "promo" });
228
+ assert.equal(used.briefSkeletonPath, undefined);
229
+ });
230
+ });
231
+
232
+ test("freeze takes the workflow from BRIEF.md over a contradicting flag", () => {
233
+ withSandbox(({ project }) => {
234
+ writeFileSync(
235
+ join(project, "BRIEF.md"),
236
+ BRIEF.replace("workflow: product-launch-video", "workflow: general-video"),
237
+ );
238
+ const frozen = freezeRecipe({
239
+ projectDir: project,
240
+ name: "promo",
241
+ workflow: "faceless-explainer",
242
+ });
243
+ assert.equal(frozen.workflow, "general-video");
244
+ assert.equal(frozen.workflowOverridden, true);
245
+ const recipe = JSON.parse(
246
+ readFileSync(join(project, ".media/recipes/promo/recipe.json"), "utf8"),
247
+ );
248
+ assert.equal(recipe.workflow, "general-video");
249
+ });
250
+ });
251
+
252
+ test("freeze without BRIEF.md falls back to --workflow; with neither it refuses", () => {
253
+ withSandbox(({ project }) => {
254
+ const frozen = freezeRecipe({
255
+ projectDir: project,
256
+ name: "promo",
257
+ workflow: "product-launch-video",
258
+ });
259
+ assert.equal(frozen.workflow, "product-launch-video");
260
+ assert.equal(frozen.workflowOverridden, false);
261
+ assert.throws(() => freezeRecipe({ projectDir: project, name: "other" }), /no workflow found/);
262
+ });
263
+ });
264
+
265
+ test("freeze finds a legacy bare style_preset record; the scoped key wins over it", () => {
266
+ withSandbox(({ project }) => {
267
+ writeFileSync(join(project, "BRIEF.md"), BRIEF);
268
+ // A record made before the store required workflow scoping.
269
+ mkdirSync(join(project, ".media"), { recursive: true });
270
+ writeFileSync(
271
+ join(project, ".media/preferences.json"),
272
+ JSON.stringify({
273
+ version: 1,
274
+ preferences: {
275
+ style_preset: {
276
+ value: "source-paper-flowchart",
277
+ confirmed_in: ["my-launch"],
278
+ updated_at: "2026-07-15T00:00:00.000Z",
279
+ },
280
+ },
281
+ sightings: {},
282
+ }),
283
+ );
284
+ freezeRecipe({ projectDir: project, name: "promo" });
285
+ const legacy = JSON.parse(
286
+ readFileSync(join(project, ".media/recipes/promo/recipe.json"), "utf8"),
287
+ );
288
+ assert.equal(legacy.style_preset, "source-paper-flowchart");
289
+
290
+ recordPreference({
291
+ projectDir: project,
292
+ key: "style_preset",
293
+ value: "pin-and-paper",
294
+ workflow: "product-launch-video",
295
+ });
296
+ freezeRecipe({ projectDir: project, name: "promo" });
297
+ const scoped = JSON.parse(
298
+ readFileSync(join(project, ".media/recipes/promo/recipe.json"), "utf8"),
299
+ );
300
+ assert.equal(scoped.style_preset, "pin-and-paper");
301
+ });
302
+ });
303
+
304
+ test("re-freezing bumps the version and archives the old folder", () => {
305
+ withSandbox(({ project }) => {
306
+ freezeRecipe({ projectDir: project, name: "promo", workflow: "product-launch-video" });
307
+ const again = freezeRecipe({
308
+ projectDir: project,
309
+ name: "promo",
310
+ workflow: "product-launch-video",
311
+ });
312
+ assert.equal(again.version, 2);
313
+ assert.ok(existsSync(join(project, ".media/recipes/promo@v1/recipe.json")));
314
+ const current = JSON.parse(
315
+ readFileSync(join(project, ".media/recipes/promo/recipe.json"), "utf8"),
316
+ );
317
+ assert.equal(current.version, 2);
318
+ });
319
+ });
320
+
321
+ test("list merges tiers (project wins), filters by workflow, skips archives", () => {
322
+ withSandbox(({ project, root }) => {
323
+ freezeRecipe({ projectDir: project, name: "promo", workflow: "product-launch-video" });
324
+ freezeRecipe({ projectDir: project, name: "promo", workflow: "product-launch-video" });
325
+ freezeRecipe({ projectDir: project, name: "explainer", workflow: "faceless-explainer" });
326
+
327
+ const fresh = join(root, "fresh-project");
328
+ mkdirSync(fresh, { recursive: true });
329
+ const all = listRecipes({ projectDir: fresh });
330
+ assert.deepEqual(all.map((r) => r.source).sort(), ["user", "user"]);
331
+ assert.equal(all.find((r) => r.name === "promo").version, 2);
332
+
333
+ const filtered = listRecipes({ projectDir: fresh, workflow: "faceless-explainer" });
334
+ assert.deepEqual(
335
+ filtered.map((r) => r.name),
336
+ ["explainer"],
337
+ );
338
+ });
339
+ });
340
+
341
+ test("use imports from the user tier into a fresh project and copies frame.md", () => {
342
+ withSandbox(({ project, root }) => {
343
+ freezeRecipe({ projectDir: project, name: "promo", workflow: "product-launch-video" });
344
+
345
+ const fresh = join(root, "fresh-project");
346
+ mkdirSync(fresh, { recursive: true });
347
+ const used = useRecipe({ projectDir: fresh, name: "Promo" });
348
+ assert.equal(used.recipe.name, "promo");
349
+ assert.equal(used.skeletonPath, ".media/recipes/promo/storyboard-skeleton.md");
350
+ assert.ok(existsSync(join(fresh, "frame.md")));
351
+ assert.ok(existsSync(join(fresh, ".media/recipes/promo/storyboard-skeleton.md")));
352
+ assert.match(
353
+ readFileSync(join(fresh, ".media/manifest.jsonl"), "utf8"),
354
+ /"imported_from":"user-tier"/,
355
+ );
356
+ });
357
+ });
358
+
359
+ test("use with an unknown name lists what exists", () => {
360
+ withSandbox(({ project }) => {
361
+ freezeRecipe({ projectDir: project, name: "promo", workflow: "product-launch-video" });
362
+ assert.throws(
363
+ () => useRecipe({ projectDir: project, name: "nope" }),
364
+ /no recipe named "nope" \(known: promo\)/,
365
+ );
366
+ });
367
+ });
@@ -0,0 +1,212 @@
1
+ // Provider registry — the v2 contract.
2
+ //
3
+ // Each media type maps to an ORDERED list of provider entries. Providers are
4
+ // tried in order; the first to return a non-null result wins, which keeps
5
+ // resolution deterministic (same request -> same provider -> same file ->
6
+ // reproducible renders). heygen-CLI is always first for the types it serves.
7
+ //
8
+ // An entry exposes any of three capability methods — search / generate /
9
+ // process — plus { name }. media-use holds no keys; each external tool owns its
10
+ // own auth. Providers, by type:
11
+ // - heygen CLI: catalog + TTS, first for every type it serves (OAuth free
12
+ // allowance first, then the user's HeyGen billing path)
13
+ // - mflux: local FLUX-class image gen, spec-selected to the machine's RAM
14
+ // (free, private, offline once cached)
15
+ // - codex CLI: image gen on the user's ChatGPT sub — the better-quality upsell
16
+ // and the fallback when no local model fits
17
+ // - Kokoro (via the hyperframes CLI): local voiceover, free/private fallback
18
+ // when HeyGen credentials are absent or --local-only is requested
19
+ //
20
+ // Generation is local-first, cloud-upsell. `ctx.provider` forces one provider
21
+ // (e.g. "make an image with codex").
22
+
23
+ import { bgmProvider } from "./bgm-provider.mjs";
24
+ import { sfxProvider } from "./sfx-provider.mjs";
25
+ import { bundledSfxProvider } from "./bundled-sfx-provider.mjs";
26
+ import { imageProvider, iconProvider } from "./image-provider.mjs";
27
+ import { brandProvider } from "./brand-provider.mjs";
28
+ import { thesvgSearch, githubAvatarSearch, faviconSearch } from "./logo-provider.mjs";
29
+ import { heygenTtsGenerate } from "./voice-provider.mjs";
30
+ import { heygenVideoGenerate } from "./heygen-video-provider.mjs";
31
+ import { ltxVideoGenerate } from "./ltx-video-provider.mjs";
32
+ import { localTtsGenerate } from "./tts-local-provider.mjs";
33
+ import { codexImageGenerate } from "./codex-provider.mjs";
34
+ import { mfluxImageGenerate } from "./mflux-provider.mjs";
35
+
36
+ // Provider markers: `network` = hits a remote service (skipped by --local-only).
37
+ // `paid` = may cost wallet credits after any OAuth/web-plan free allowance
38
+ // (documentation for the agent's cost judgment, X4: agent-initiated paid should
39
+ // confirm). HeyGen catalog SEARCH is free; HeyGen TTS is free for eligible
40
+ // OAuth CLI users up to the monthly allowance, then follows the user's billing.
41
+ const A = (name, caps) => ({ name, ...caps }); // local, free
42
+ const N = (name, caps) => ({ name, network: true, ...caps }); // remote, free
43
+ const P = (name, caps) => ({ name, network: true, paid: true, ...caps }); // remote, paid
44
+
45
+ // heygen-CLI first. All remote providers are skipped by --local-only.
46
+ const REGISTRY = {
47
+ bgm: [N("heygen.audio.sounds", { search: bgmProvider.search })],
48
+ sfx: [
49
+ A("bundled.sfx", { search: bundledSfxProvider.search }),
50
+ N("heygen.audio.sounds", { search: sfxProvider.search }),
51
+ ],
52
+ image: [
53
+ N("heygen.asset.search", { search: imageProvider.search }),
54
+ // Catalog miss -> generate. Local first (best FLUX-class model the machine's
55
+ // RAM can run, spec-selected; free, private, kept under --local-only), then
56
+ // the codex CLI on the user's ChatGPT sub as the better-quality upsell and
57
+ // the fallback when no local model fits.
58
+ A("mflux.local", { generate: mfluxImageGenerate }),
59
+ N("codex.image_gen", { generate: codexImageGenerate }),
60
+ ],
61
+ icon: [N("heygen.asset.search", { search: iconProvider.search })],
62
+ logo: [
63
+ // Official brand marks: theSVG first, then GitHub org avatar and favicon
64
+ // for the brands it lacks. HeyGen asset search is deliberately absent — it
65
+ // returns generic look-alike icons for brand queries. All free, all
66
+ // network → --local-only leaves only the cache rungs.
67
+ N("thesvg", { search: thesvgSearch }),
68
+ N("github.avatar", { search: githubAvatarSearch }),
69
+ N("favicon.ddg", { search: faviconSearch }),
70
+ ],
71
+ voice: [
72
+ // HeyGen TTS first when credentialed so CLI/OAuth users consume the free
73
+ // web-plan allowance (10 min/month) before any paid path. --local-only skips
74
+ // it and keeps Kokoro as the private/offline fallback.
75
+ // Deliberately kept `paid` (X4 confirm-before-call) even though the first
76
+ // 10 min/month are free: the client can't know the remaining allowance, so
77
+ // confirming is safer than risking a silent charge once it's spent. (A
78
+ // tri-state "quota-first, paid after" would need backend quota state.)
79
+ P("heygen.tts", { generate: heygenTtsGenerate }),
80
+ A("kokoro.local", { generate: localTtsGenerate }),
81
+ ],
82
+ video: [
83
+ // HeyGen avatar video first when credentialed; --local-only skips it and
84
+ // keeps LTX as the local fallback.
85
+ P("heygen.video", { generate: heygenVideoGenerate }),
86
+ A("ltx.local", { generate: ltxVideoGenerate }),
87
+ ],
88
+ brand: [
89
+ // Local design spec, not heygen — reads frame.md / design.md tokens.
90
+ A("design_spec", { search: brandProvider.search }),
91
+ ],
92
+ grade: [
93
+ // Local deterministic cascade handled by resolve.mjs so grade records can
94
+ // carry an inline block as well as an optional frozen .cube file.
95
+ A("color_grade.local", { search: async () => null, generate: async () => null }),
96
+ ],
97
+ lut: [
98
+ // Lower-level local LUT generation/freezing path handled by resolve.mjs.
99
+ A("cube_lut.local", { search: async () => null, generate: async () => null }),
100
+ ],
101
+ };
102
+
103
+ function listFor(type) {
104
+ const list = REGISTRY[type];
105
+ if (!list) throw new Error(`unknown media type: ${type}`);
106
+ return list;
107
+ }
108
+
109
+ /** Ordered providers for a type. */
110
+ export function getProviders(type) {
111
+ return listFor(type);
112
+ }
113
+
114
+ /** All declared media types. */
115
+ export function listTypes() {
116
+ return Object.keys(REGISTRY);
117
+ }
118
+
119
+ /** Provider names available for a type, in cascade order (for --provider validation). */
120
+ export function providerNamesFor(type) {
121
+ return listFor(type).map((p) => p.name);
122
+ }
123
+
124
+ /**
125
+ * name -> cost tier ("local" | "network_free" | "network_paid") over a collection
126
+ * of ordered provider lists, i.e. the A / N / P distinction the constructors above
127
+ * already declare. Exported so the conflict rule below is testable against a
128
+ * fixture; production reads the REGISTRY-wide index built from it.
129
+ *
130
+ * A name declared under two media types must carry the same tier in both. If it
131
+ * didn't, "did this resolve cost credit" would depend on which type happened to
132
+ * serve it, and the telemetry property would mean nothing — so this throws at
133
+ * import rather than silently picking one.
134
+ */
135
+ export function buildProviderTierIndex(providerLists) {
136
+ const tiers = new Map();
137
+ for (const list of providerLists) {
138
+ for (const p of list) {
139
+ const tier = p.paid ? "network_paid" : p.network ? "network_free" : "local";
140
+ const prior = tiers.get(p.name);
141
+ if (prior && prior !== tier)
142
+ throw new Error(
143
+ `provider "${p.name}" is declared ${prior} under one media type and ${tier} under another`,
144
+ );
145
+ tiers.set(p.name, tier);
146
+ }
147
+ }
148
+ return tiers;
149
+ }
150
+
151
+ const PROVIDER_TIERS = buildProviderTierIndex(Object.values(REGISTRY));
152
+
153
+ /**
154
+ * Cost tier of a provider by name, or undefined for a name the registry doesn't
155
+ * declare. The registry stays the single owner of "does this cost credit", so
156
+ * dashboards and callers never re-derive it from provider-name string matching.
157
+ */
158
+ export function providerTierFor(name) {
159
+ return PROVIDER_TIERS.get(name);
160
+ }
161
+
162
+ /**
163
+ * Does an override token (full name like "codex.image_gen" or a prefix like
164
+ * "codex") match any provider declared for the type? Same match rule as
165
+ * runProviders, so validation and dispatch never disagree.
166
+ */
167
+ export function providerMatches(type, want) {
168
+ return providerNamesFor(type).some((n) => n === want || n.startsWith(`${want}.`));
169
+ }
170
+
171
+ /**
172
+ * Back-compat shim for the v1 single-provider API. Returns the first declared
173
+ * provider for the type (tagged with `type`); throws for an unknown type.
174
+ * Kept for v1 callers only — new code should use getProviders/runCapability.
175
+ */
176
+ export function getProvider(type) {
177
+ const first = listFor(type)[0] || {};
178
+ return { ...first, type };
179
+ }
180
+
181
+ /**
182
+ * Run a capability across an explicit ordered provider list. Tries each in
183
+ * order, returns the first non-null result, skips providers that don't expose
184
+ * the capability. Pure over its input — the unit-testable core of the cascade.
185
+ *
186
+ * Offline guard: a `network` provider is skipped when `ctx.localOnly` is set —
187
+ * unconditionally, even under a `ctx.provider` override. --local-only is a hard
188
+ * safety flag: it must never make a network call. Forcing a network provider
189
+ * while offline yields a clean miss (the caller explains the conflict), never a
190
+ * silent network request.
191
+ * Provider override: `ctx.provider` (a full name like "codex.image_gen" or a
192
+ * prefix like "codex") pins resolution to matching providers only — this is how
193
+ * a user "make an image WITH codex" forces the upsell instead of taking the
194
+ * free-first default.
195
+ */
196
+ export async function runProviders(providers, capability, intent, ctx) {
197
+ const want = ctx?.provider;
198
+ for (const p of providers) {
199
+ if (want && p.name !== want && !p.name.startsWith(`${want}.`)) continue;
200
+ if (p.network && ctx?.localOnly) continue; // --local-only wins, even over --provider
201
+ const fn = p[capability];
202
+ if (typeof fn !== "function") continue;
203
+ const res = await fn(intent, ctx);
204
+ if (res) return res;
205
+ }
206
+ return null;
207
+ }
208
+
209
+ /** Run a capability over the providers for a type (deterministic, heygen-first). */
210
+ export async function runCapability(type, capability, intent, ctx) {
211
+ return runProviders(getProviders(type), capability, intent, ctx);
212
+ }